github.com/cloudwan/edgelq-sdk@v1.15.4/monitoring/access/v3/alerting_condition/alerting_condition.pb.api_access.go (about)

     1  // Code generated by protoc-gen-goten-access
     2  // Resource: AlertingCondition
     3  // DO NOT EDIT!!!
     4  
     5  package alerting_condition_access
     6  
     7  import (
     8  	"context"
     9  
    10  	"google.golang.org/grpc"
    11  	"google.golang.org/grpc/codes"
    12  	"google.golang.org/grpc/metadata"
    13  	"google.golang.org/grpc/status"
    14  
    15  	gotenaccess "github.com/cloudwan/goten-sdk/runtime/access"
    16  	gotenresource "github.com/cloudwan/goten-sdk/runtime/resource"
    17  	gotenfilter "github.com/cloudwan/goten-sdk/runtime/resource/filter"
    18  	"github.com/cloudwan/goten-sdk/types/watch_type"
    19  
    20  	alerting_condition_client "github.com/cloudwan/edgelq-sdk/monitoring/client/v3/alerting_condition"
    21  	alerting_condition "github.com/cloudwan/edgelq-sdk/monitoring/resources/v3/alerting_condition"
    22  )
    23  
    24  var (
    25  	_ = new(context.Context)
    26  
    27  	_ = metadata.MD{}
    28  	_ = new(grpc.ClientConnInterface)
    29  	_ = codes.NotFound
    30  	_ = status.Status{}
    31  
    32  	_ = new(gotenaccess.Watcher)
    33  	_ = watch_type.WatchType_STATEFUL
    34  	_ = new(gotenresource.ListQuery)
    35  	_ = gotenfilter.Eq
    36  )
    37  
    38  type apiAlertingConditionAccess struct {
    39  	client alerting_condition_client.AlertingConditionServiceClient
    40  }
    41  
    42  func NewApiAlertingConditionAccess(client alerting_condition_client.AlertingConditionServiceClient) alerting_condition.AlertingConditionAccess {
    43  	return &apiAlertingConditionAccess{client: client}
    44  }
    45  
    46  func (a *apiAlertingConditionAccess) GetAlertingCondition(ctx context.Context, query *alerting_condition.GetQuery, opts ...gotenresource.GetOption) (*alerting_condition.AlertingCondition, error) {
    47  	getOpts := gotenresource.MakeGetOptions(opts)
    48  	callHeaders := metadata.MD{}
    49  	if getOpts.GetSkipCache() {
    50  		callHeaders["cache-control"] = []string{"no-cache"}
    51  	}
    52  	callOpts := []grpc.CallOption{}
    53  	if len(callHeaders) > 0 {
    54  		callOpts = append(callOpts, grpc.Header(&callHeaders))
    55  	}
    56  	if !query.Reference.IsFullyQualified() {
    57  		return nil, status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", query.Reference)
    58  	}
    59  	request := &alerting_condition_client.GetAlertingConditionRequest{
    60  		Name:      &query.Reference.Name,
    61  		FieldMask: query.Mask,
    62  	}
    63  	res, err := a.client.GetAlertingCondition(ctx, request, callOpts...)
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  	query.Reference.Resolve(res)
    68  	return res, nil
    69  }
    70  
    71  func (a *apiAlertingConditionAccess) BatchGetAlertingConditions(ctx context.Context, refs []*alerting_condition.Reference, opts ...gotenresource.BatchGetOption) error {
    72  	batchGetOpts := gotenresource.MakeBatchGetOptions(opts)
    73  	callHeaders := metadata.MD{}
    74  	if batchGetOpts.GetSkipCache() {
    75  		callHeaders["cache-control"] = []string{"no-cache"}
    76  	}
    77  	callOpts := []grpc.CallOption{}
    78  	if len(callHeaders) > 0 {
    79  		callOpts = append(callOpts, grpc.Header(&callHeaders))
    80  	}
    81  	asNames := make([]*alerting_condition.Name, 0, len(refs))
    82  	for _, ref := range refs {
    83  		if !ref.IsFullyQualified() {
    84  			return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", ref)
    85  		}
    86  		asNames = append(asNames, &ref.Name)
    87  	}
    88  	request := &alerting_condition_client.BatchGetAlertingConditionsRequest{
    89  		Names: asNames,
    90  	}
    91  	fieldMask := batchGetOpts.GetFieldMask(alerting_condition.GetDescriptor())
    92  	if fieldMask != nil {
    93  		request.FieldMask = fieldMask.(*alerting_condition.AlertingCondition_FieldMask)
    94  	}
    95  	resp, err := a.client.BatchGetAlertingConditions(ctx, request, callOpts...)
    96  	if err != nil {
    97  		return err
    98  	}
    99  	resultMap := make(map[alerting_condition.Name]*alerting_condition.AlertingCondition, len(refs))
   100  	for _, resolvedRes := range resp.GetAlertingConditions() {
   101  		resultMap[*resolvedRes.GetName()] = resolvedRes
   102  	}
   103  	for _, ref := range refs {
   104  		resolvedRes := resultMap[ref.Name]
   105  		if resolvedRes != nil {
   106  			ref.Resolve(resolvedRes)
   107  		}
   108  	}
   109  	if batchGetOpts.MustResolveAll() && len(resp.GetMissing()) > 0 {
   110  		return status.Errorf(codes.NotFound, "Number of references not found: %d", len(resp.GetMissing()))
   111  	}
   112  	return nil
   113  }
   114  
   115  func (a *apiAlertingConditionAccess) QueryAlertingConditions(ctx context.Context, query *alerting_condition.ListQuery, opts ...gotenresource.QueryOption) (*alerting_condition.QueryResultSnapshot, error) {
   116  	qOpts := gotenresource.MakeQueryOptions(opts)
   117  	callHeaders := metadata.MD{}
   118  	if qOpts.GetSkipCache() {
   119  		callHeaders["cache-control"] = []string{"no-cache"}
   120  	}
   121  	callOpts := []grpc.CallOption{}
   122  	if len(callHeaders) > 0 {
   123  		callOpts = append(callOpts, grpc.Header(&callHeaders))
   124  	}
   125  	request := &alerting_condition_client.ListAlertingConditionsRequest{
   126  		Filter:            query.Filter,
   127  		FieldMask:         query.Mask,
   128  		IncludePagingInfo: query.WithPagingInfo,
   129  	}
   130  	if query.Pager != nil {
   131  		request.PageSize = int32(query.Pager.Limit)
   132  		request.OrderBy = query.Pager.OrderBy
   133  		request.PageToken = query.Pager.Cursor
   134  	}
   135  	if query.Filter != nil && query.Filter.GetCondition() != nil {
   136  		request.Filter, request.Parent = getParentAndFilter(query.Filter)
   137  	}
   138  	resp, err := a.client.ListAlertingConditions(ctx, request)
   139  	if err != nil {
   140  		return nil, err
   141  	}
   142  	return &alerting_condition.QueryResultSnapshot{
   143  		AlertingConditions: resp.AlertingConditions,
   144  		NextPageCursor:     resp.NextPageToken,
   145  		PrevPageCursor:     resp.PrevPageToken,
   146  		TotalResultsCount:  resp.TotalResultsCount,
   147  		CurrentOffset:      resp.CurrentOffset,
   148  	}, nil
   149  }
   150  
   151  func (a *apiAlertingConditionAccess) SearchAlertingConditions(ctx context.Context, query *alerting_condition.SearchQuery, opts ...gotenresource.QueryOption) (*alerting_condition.QueryResultSnapshot, error) {
   152  	qOpts := gotenresource.MakeQueryOptions(opts)
   153  	callHeaders := metadata.MD{}
   154  	if qOpts.GetSkipCache() {
   155  		callHeaders["cache-control"] = []string{"no-cache"}
   156  	}
   157  	callOpts := []grpc.CallOption{}
   158  	if len(callHeaders) > 0 {
   159  		callOpts = append(callOpts, grpc.Header(&callHeaders))
   160  	}
   161  	request := &alerting_condition_client.SearchAlertingConditionsRequest{
   162  		Phrase:    query.Phrase,
   163  		Filter:    query.Filter,
   164  		FieldMask: query.Mask,
   165  	}
   166  	if query.Pager != nil {
   167  		request.PageSize = int32(query.Pager.Limit)
   168  		request.OrderBy = query.Pager.OrderBy
   169  		request.PageToken = query.Pager.Cursor
   170  	}
   171  	if query.Filter != nil && query.Filter.GetCondition() != nil {
   172  		request.Filter, request.Parent = getParentAndFilter(query.Filter)
   173  	}
   174  	resp, err := a.client.SearchAlertingConditions(ctx, request, callOpts...)
   175  	if err != nil {
   176  		return nil, err
   177  	}
   178  	return &alerting_condition.QueryResultSnapshot{
   179  		AlertingConditions: resp.AlertingConditions,
   180  		NextPageCursor:     resp.NextPageToken,
   181  		PrevPageCursor:     resp.PrevPageToken,
   182  		CurrentOffset:      resp.CurrentOffset,
   183  		TotalResultsCount:  resp.TotalResultsCount,
   184  	}, nil
   185  }
   186  
   187  func (a *apiAlertingConditionAccess) WatchAlertingCondition(ctx context.Context, query *alerting_condition.GetQuery, observerCb func(*alerting_condition.AlertingConditionChange) error) error {
   188  	if !query.Reference.IsFullyQualified() {
   189  		return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", query.Reference)
   190  	}
   191  	request := &alerting_condition_client.WatchAlertingConditionRequest{
   192  		Name:      &query.Reference.Name,
   193  		FieldMask: query.Mask,
   194  	}
   195  	ctx, cancel := context.WithCancel(ctx)
   196  	defer cancel()
   197  
   198  	changesStream, initErr := a.client.WatchAlertingCondition(ctx, request)
   199  	if initErr != nil {
   200  		return initErr
   201  	}
   202  	for {
   203  		resp, err := changesStream.Recv()
   204  		if err != nil {
   205  			return status.Errorf(status.Code(err), "watch recv error: %s", err)
   206  		}
   207  		change := resp.GetChange()
   208  		if err := observerCb(change); err != nil {
   209  			return err
   210  		}
   211  	}
   212  }
   213  
   214  func (a *apiAlertingConditionAccess) WatchAlertingConditions(ctx context.Context, query *alerting_condition.WatchQuery, observerCb func(*alerting_condition.QueryResultChange) error) error {
   215  	request := &alerting_condition_client.WatchAlertingConditionsRequest{
   216  		Filter:       query.Filter,
   217  		FieldMask:    query.Mask,
   218  		MaxChunkSize: int32(query.ChunkSize),
   219  		Type:         query.WatchType,
   220  		ResumeToken:  query.ResumeToken,
   221  		StartingTime: query.StartingTime,
   222  	}
   223  	if query.Pager != nil {
   224  		request.OrderBy = query.Pager.OrderBy
   225  		request.PageSize = int32(query.Pager.Limit)
   226  		request.PageToken = query.Pager.Cursor
   227  	}
   228  	if query.Filter != nil && query.Filter.GetCondition() != nil {
   229  		request.Filter, request.Parent = getParentAndFilter(query.Filter)
   230  	}
   231  	ctx, cancel := context.WithCancel(ctx)
   232  	defer cancel()
   233  
   234  	changesStream, initErr := a.client.WatchAlertingConditions(ctx, request)
   235  	if initErr != nil {
   236  		return initErr
   237  	}
   238  	for {
   239  		respChange, err := changesStream.Recv()
   240  		if err != nil {
   241  			return status.Errorf(status.Code(err), "watch recv error: %s", err)
   242  		}
   243  		changesWithPaging := &alerting_condition.QueryResultChange{
   244  			Changes:      respChange.AlertingConditionChanges,
   245  			IsCurrent:    respChange.IsCurrent,
   246  			IsHardReset:  respChange.IsHardReset,
   247  			IsSoftReset:  respChange.IsSoftReset,
   248  			ResumeToken:  respChange.ResumeToken,
   249  			SnapshotSize: respChange.SnapshotSize,
   250  		}
   251  		if respChange.PageTokenChange != nil {
   252  			changesWithPaging.PrevPageCursor = respChange.PageTokenChange.PrevPageToken
   253  			changesWithPaging.NextPageCursor = respChange.PageTokenChange.NextPageToken
   254  		}
   255  		if err := observerCb(changesWithPaging); err != nil {
   256  			return err
   257  		}
   258  	}
   259  }
   260  
   261  func (a *apiAlertingConditionAccess) SaveAlertingCondition(ctx context.Context, res *alerting_condition.AlertingCondition, opts ...gotenresource.SaveOption) error {
   262  	saveOpts := gotenresource.MakeSaveOptions(opts)
   263  	var resp *alerting_condition.AlertingCondition
   264  	var err error
   265  	if !saveOpts.OnlyCreate() {
   266  		updateRequest := &alerting_condition_client.UpdateAlertingConditionRequest{
   267  			AlertingCondition: res,
   268  			AllowMissing:      !saveOpts.OnlyUpdate(),
   269  		}
   270  		if updateMask := saveOpts.GetUpdateMask(); updateMask != nil {
   271  			updateRequest.UpdateMask = updateMask.(*alerting_condition.AlertingCondition_FieldMask)
   272  		}
   273  		if mask, conditionalState := saveOpts.GetCAS(); mask != nil && conditionalState != nil {
   274  			updateRequest.Cas = &alerting_condition_client.UpdateAlertingConditionRequest_CAS{
   275  				ConditionalState: conditionalState.(*alerting_condition.AlertingCondition),
   276  				FieldMask:        mask.(*alerting_condition.AlertingCondition_FieldMask),
   277  			}
   278  		}
   279  		resp, err = a.client.UpdateAlertingCondition(ctx, updateRequest)
   280  		if err != nil {
   281  			return err
   282  		}
   283  	} else {
   284  		createRequest := &alerting_condition_client.CreateAlertingConditionRequest{
   285  			AlertingCondition: res,
   286  		}
   287  		resp, err = a.client.CreateAlertingCondition(ctx, createRequest)
   288  		if err != nil {
   289  			return err
   290  		}
   291  	}
   292  	// Ensure object is updated - but in most shallow way possible
   293  	res.MakeDiffFieldMask(resp).Set(res, resp)
   294  	return nil
   295  }
   296  
   297  func (a *apiAlertingConditionAccess) DeleteAlertingCondition(ctx context.Context, ref *alerting_condition.Reference, opts ...gotenresource.DeleteOption) error {
   298  	delOpts := gotenresource.MakeDeleteOptions(opts)
   299  	if !ref.IsFullyQualified() {
   300  		return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", ref)
   301  	}
   302  	request := &alerting_condition_client.DeleteAlertingConditionRequest{
   303  		Name:         &ref.Name,
   304  		AllowMissing: delOpts.AllowMissing(),
   305  	}
   306  	_, err := a.client.DeleteAlertingCondition(ctx, request)
   307  	return err
   308  }
   309  func getParentAndFilter(fullFilter *alerting_condition.Filter) (*alerting_condition.Filter, *alerting_condition.ParentName) {
   310  	var withParentExtraction func(cnd alerting_condition.FilterCondition) alerting_condition.FilterCondition
   311  	var resultParent *alerting_condition.ParentName
   312  	var resultFilter *alerting_condition.Filter
   313  	withParentExtraction = func(cnd alerting_condition.FilterCondition) alerting_condition.FilterCondition {
   314  		switch tCnd := cnd.(type) {
   315  		case *alerting_condition.FilterConditionComposite:
   316  			if tCnd.GetOperator() == gotenfilter.AND {
   317  				withoutParentCnds := make([]alerting_condition.FilterCondition, 0)
   318  				for _, subCnd := range tCnd.Conditions {
   319  					if subCndNoParent := withParentExtraction(subCnd); subCndNoParent != nil {
   320  						withoutParentCnds = append(withoutParentCnds, subCndNoParent)
   321  					}
   322  				}
   323  				if len(withoutParentCnds) == 0 {
   324  					return nil
   325  				}
   326  				if len(withoutParentCnds) == 1 {
   327  					return withoutParentCnds[0]
   328  				}
   329  				return alerting_condition.AndFilterConditions(withoutParentCnds...)
   330  			} else {
   331  				return tCnd
   332  			}
   333  		case *alerting_condition.FilterConditionCompare:
   334  			if tCnd.GetOperator() == gotenfilter.Eq && tCnd.GetRawFieldPath().String() == "name" {
   335  				nameValue := tCnd.GetRawValue().(*alerting_condition.Name)
   336  				if nameValue != nil && nameValue.ParentName.IsSpecified() {
   337  					resultParent = &nameValue.ParentName
   338  					if nameValue.IsFullyQualified() {
   339  						return tCnd
   340  					}
   341  					return nil
   342  				}
   343  			}
   344  			return tCnd
   345  		default:
   346  			return tCnd
   347  		}
   348  	}
   349  	cndWithoutParent := withParentExtraction(fullFilter.GetCondition())
   350  	if cndWithoutParent != nil {
   351  		resultFilter = &alerting_condition.Filter{FilterCondition: cndWithoutParent}
   352  	}
   353  	return resultFilter, resultParent
   354  }
   355  
   356  func GetApiAccessBuilder() *gotenaccess.ApiAccessBuilder {
   357  	return gotenaccess.GetRegistry().FindApiAccessBuilder(alerting_condition.GetDescriptor())
   358  }
   359  
   360  func init() {
   361  	gotenaccess.GetRegistry().RegisterApiAccessConstructor(alerting_condition.GetDescriptor(), func(cc grpc.ClientConnInterface) gotenresource.Access {
   362  		return alerting_condition.AsAnyCastAccess(NewApiAlertingConditionAccess(alerting_condition_client.NewAlertingConditionServiceClient(cc)))
   363  	})
   364  }