Coder Social home page Coder Social logo

go-commons's People

Contributors

diversario avatar jtaleric avatar krishvoor avatar rsevilla87 avatar shashank-boyapally avatar vishnuchalla avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

go-commons's Issues

[RFE] Split go-commons in different modules

At the moment go-commons is an all-in-one module, this is coming with several caveats.

  • Cutting a new release affects all the libraries, this is not desired since a project could want to stick on an specific release of a library.

  • Creates too many dependencies, a project only using one of the libraries will inherit all go-commons dependencies.

Splitting the project in different modules comes also with some downsides, the versioning handling of the different modules will be the most problematic one.

Let's use this issue to discuss about the possibilities

Node-density with mastersSchedulable: true

Kube-burner's node-density uses the number of worker nodes to calculate the number of pods to deploy in the cluster.
With this change recently pushed, kube-burner's failes because the nodes in the CI cluster has the scheduler configured with mastersSchedulable: true, hence the nodes are labeled as master and workers simultaneosly

for _, node := range nodes.Items {
if _, ok := node.Labels["node-role.kubernetes.io/master"]; ok { // Check for master role
clusterMetadata.MasterNodesCount++
clusterMetadata.MasterNodesType = node.Labels["node.kubernetes.io/instance-type"]
} else if _, ok := node.Labels["node-role.kubernetes.io/infra"]; ok { // Check for infra role
clusterMetadata.InfraNodesCount++
clusterMetadata.InfraNodesType = node.Labels["node.kubernetes.io/instance-type"]
} else if _, ok := node.Labels["node-role.kubernetes.io/worker"]; ok { // Check for worker role
clusterMetadata.WorkerNodesCount++
clusterMetadata.WorkerNodesType = node.Labels["node.kubernetes.io/instance-type"]
} else {
clusterMetadata.OtherNodesCount++

We should fix this corner case.

README needs documention

The current readme does not have any data. We should add a good description of the repository, how to contribute, etc.

Use native prometheus aggregations instead of stats package

Looking at https://github.com/cloud-bulldozer/go-commons/blob/main/prometheus/prometheus.go#L89 which is used for the kube-burner ocp wrapper reporting mode, it looks like we are extracting all the datapoints over the timeseries and then feeding them into methods in stats package as per the aggregation required. It looks like prometheus supports aggregations natively (https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time) and we should switch over to using those for better consistency and confidence in our aggregations.

[RFE] Metadata collection

As a next step to standardize our (golang based) tooling we should enable this project to collect OCP cluster metadata. So different go based tools such as k8s-netperf, kube-burner, ocm-api-load... can use it and index use the same format of cluster metadata.

We can use kube-burner's cluster metadata collection as a starting point.

https://github.com/cloud-bulldozer/kube-burner/blob/4a79917a0dcfb33063b2c965f47631f10f09dd6c/pkg/workloads/helpers.go#L60-L79

type clusterMetadata struct {
	MetricName       string                 `json:"metricName,omitempty"`
	UUID             string                 `json:"uuid"`
	Platform         string                 `json:"platform"`
	OCPVersion       string                 `json:"ocpVersion"`
	K8SVersion       string                 `json:"k8sVersion"`
	MasterNodesType  string                 `json:"masterNodesType"`
	WorkerNodesType  string                 `json:"workerNodesType"`
	InfraNodesType   string                 `json:"infraNodesType"`
	WorkerNodesCount int                    `json:"workerNodesCount"`
	InfraNodesCount  int                    `json:"infraNodesCount"`
	TotalNodes       int                    `json:"totalNodes"`
	SDNType          string                 `json:"sdnType"`
	Benchmark        string                 `json:"benchmark"`
	Timestamp        time.Time              `json:"timestamp"`
	EndDate          time.Time              `json:"endDate"`
	ClusterName      string                 `json:"clusterName"`
	Passed           bool                   `json:"passed"`
	Metadata         map[string]interface{} `json:"metadata,omitempty"`
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.