mirror of
				https://github.com/ClusterCockpit/cc-backend
				synced 2025-10-31 16:05:06 +01:00 
			
		
		
		
	add scopes, paging and backend filtering to nodeList
This commit is contained in:
		| @@ -2,7 +2,7 @@ package graph | ||||
|  | ||||
| // This file will be automatically regenerated based on the schema, any resolver implementations | ||||
| // will be copied through when generating and any unknown code will be moved to the end. | ||||
| // Code generated by github.com/99designs/gqlgen version v0.17.49 | ||||
| // Code generated by github.com/99designs/gqlgen version v0.17.57 | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| @@ -466,6 +466,68 @@ func (r *queryResolver) NodeMetrics(ctx context.Context, cluster string, nodes [ | ||||
| 	return nodeMetrics, nil | ||||
| } | ||||
|  | ||||
| // NodeMetricsList is the resolver for the nodeMetricsList field. | ||||
| func (r *queryResolver) NodeMetricsList(ctx context.Context, cluster string, subCluster string, nodeFilter string, scopes []schema.MetricScope, metrics []string, from time.Time, to time.Time, page *model.PageRequest, resolution *int) (*model.NodesResultList, error) { | ||||
| 	if resolution == nil { // Load from Config | ||||
| 		if config.Keys.EnableResampling != nil { | ||||
| 			defaultRes := slices.Max(config.Keys.EnableResampling.Resolutions) | ||||
| 			resolution = &defaultRes | ||||
| 		} else { // Set 0 (Loads configured metric timestep) | ||||
| 			defaultRes := 0 | ||||
| 			resolution = &defaultRes | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	user := repository.GetUserFromContext(ctx) | ||||
| 	if user != nil && !user.HasRole(schema.RoleAdmin) { | ||||
| 		return nil, errors.New("you need to be an administrator for this query") | ||||
| 	} | ||||
|  | ||||
| 	if metrics == nil { | ||||
| 		for _, mc := range archive.GetCluster(cluster).MetricConfig { | ||||
| 			metrics = append(metrics, mc.Name) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	data, totalNodes, hasNextPage, err := metricDataDispatcher.LoadNodeListData(cluster, subCluster, nodeFilter, metrics, scopes, *resolution, from, to, page, ctx) | ||||
| 	if err != nil { | ||||
| 		log.Warn("error while loading node data") | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	nodeMetricsList := make([]*model.NodeMetrics, 0, len(data)) | ||||
| 	for hostname, metrics := range data { | ||||
| 		host := &model.NodeMetrics{ | ||||
| 			Host:    hostname, | ||||
| 			Metrics: make([]*model.JobMetricWithName, 0, len(metrics)*len(scopes)), | ||||
| 		} | ||||
| 		host.SubCluster, err = archive.GetSubClusterByNode(cluster, hostname) | ||||
| 		if err != nil { | ||||
| 			log.Warnf("error in nodeMetrics resolver: %s", err) | ||||
| 		} | ||||
|  | ||||
| 		for metric, scopedMetrics := range metrics { | ||||
| 			for scope, scopedMetric := range scopedMetrics { | ||||
| 				host.Metrics = append(host.Metrics, &model.JobMetricWithName{ | ||||
| 					Name:   metric, | ||||
| 					Scope:  scope, | ||||
| 					Metric: scopedMetric, | ||||
| 				}) | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		nodeMetricsList = append(nodeMetricsList, host) | ||||
| 	} | ||||
|  | ||||
| 	nodeMetricsListResult := &model.NodesResultList{ | ||||
| 		Items:       nodeMetricsList, | ||||
| 		TotalNodes:  &totalNodes, | ||||
| 		HasNextPage: &hasNextPage, | ||||
| 	} | ||||
|  | ||||
| 	return nodeMetricsListResult, nil | ||||
| } | ||||
|  | ||||
| // NumberOfNodes is the resolver for the numberOfNodes field. | ||||
| func (r *subClusterResolver) NumberOfNodes(ctx context.Context, obj *schema.SubCluster) (int, error) { | ||||
| 	nodeList, err := archive.ParseNodeList(obj.Nodes) | ||||
| @@ -493,11 +555,9 @@ func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} } | ||||
| // SubCluster returns generated.SubClusterResolver implementation. | ||||
| func (r *Resolver) SubCluster() generated.SubClusterResolver { return &subClusterResolver{r} } | ||||
|  | ||||
| type ( | ||||
| 	clusterResolver     struct{ *Resolver } | ||||
| 	jobResolver         struct{ *Resolver } | ||||
| 	metricValueResolver struct{ *Resolver } | ||||
| 	mutationResolver    struct{ *Resolver } | ||||
| 	queryResolver       struct{ *Resolver } | ||||
| 	subClusterResolver  struct{ *Resolver } | ||||
| ) | ||||
| type clusterResolver struct{ *Resolver } | ||||
| type jobResolver struct{ *Resolver } | ||||
| type metricValueResolver struct{ *Resolver } | ||||
| type mutationResolver struct{ *Resolver } | ||||
| type queryResolver struct{ *Resolver } | ||||
| type subClusterResolver struct{ *Resolver } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user