-
Notifications
You must be signed in to change notification settings - Fork 3.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(kv): remove rule service behaviours from kv
This also introduces the org id resolver type. Which is transplanted from the kv service. As this one function coupled all resource capabilities onto the kv service. Making removing these capabilities impossible. Moving this type out into its own package which depends on each service explicitly ensures we don't have one type which has to implement all the service contracts.
- Loading branch information
Showing
13 changed files
with
250 additions
and
709 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
package resource | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
|
||
"github.com/influxdata/influxdb/v2" | ||
) | ||
|
||
// OrgIDResolver is a type which combines multiple resource services | ||
// in order to resolve the resources associated org ID. | ||
// Ideally you do not need to use this type, it is mostly a stop-gap | ||
// while we migrate responsibilities off of *kv.Service. | ||
// Consider it deprecated. | ||
type OrgIDResolver struct { | ||
AuthorizationFinder interface { | ||
FindAuthorizationByID(context.Context, influxdb.ID) (*influxdb.Authorization, error) | ||
} | ||
BucketFinder interface { | ||
FindBucketByID(context.Context, influxdb.ID) (*influxdb.Bucket, error) | ||
} | ||
OrganizationFinder interface { | ||
FindOrganizationByID(context.Context, influxdb.ID) (*influxdb.Organization, error) | ||
} | ||
DashboardFinder interface { | ||
FindDashboardByID(context.Context, influxdb.ID) (*influxdb.Dashboard, error) | ||
} | ||
SourceFinder interface { | ||
FindSourceByID(context.Context, influxdb.ID) (*influxdb.Source, error) | ||
} | ||
TaskFinder interface { | ||
FindTaskByID(context.Context, influxdb.ID) (*influxdb.Task, error) | ||
} | ||
TelegrafConfigFinder interface { | ||
FindTelegrafConfigByID(context.Context, influxdb.ID) (*influxdb.TelegrafConfig, error) | ||
} | ||
VariableFinder interface { | ||
FindVariableByID(context.Context, influxdb.ID) (*influxdb.Variable, error) | ||
} | ||
TargetFinder interface { | ||
GetTargetByID(context.Context, influxdb.ID) (*influxdb.ScraperTarget, error) | ||
} | ||
CheckFinder interface { | ||
FindCheckByID(context.Context, influxdb.ID) (influxdb.Check, error) | ||
} | ||
NotificationEndpointFinder interface { | ||
FindNotificationEndpointByID(context.Context, influxdb.ID) (influxdb.NotificationEndpoint, error) | ||
} | ||
NotificationRuleFinder interface { | ||
FindNotificationRuleByID(context.Context, influxdb.ID) (influxdb.NotificationRule, error) | ||
} | ||
} | ||
|
||
// FindResourceOrganizationID is used to find the organization that a resource belongs to five the id of a resource and a resource type. | ||
func (o *OrgIDResolver) FindResourceOrganizationID(ctx context.Context, rt influxdb.ResourceType, id influxdb.ID) (influxdb.ID, error) { | ||
switch rt { | ||
case influxdb.AuthorizationsResourceType: | ||
if o.AuthorizationFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.AuthorizationFinder.FindAuthorizationByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.OrgID, nil | ||
case influxdb.BucketsResourceType: | ||
if o.BucketFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.BucketFinder.FindBucketByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.OrgID, nil | ||
case influxdb.OrgsResourceType: | ||
if o.OrganizationFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.OrganizationFinder.FindOrganizationByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.ID, nil | ||
case influxdb.DashboardsResourceType: | ||
if o.DashboardFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.DashboardFinder.FindDashboardByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.OrganizationID, nil | ||
case influxdb.SourcesResourceType: | ||
if o.SourceFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.SourceFinder.FindSourceByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.OrganizationID, nil | ||
case influxdb.TasksResourceType: | ||
if o.TaskFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.TaskFinder.FindTaskByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.OrganizationID, nil | ||
case influxdb.TelegrafsResourceType: | ||
if o.TelegrafConfigFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.TelegrafConfigFinder.FindTelegrafConfigByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.OrgID, nil | ||
case influxdb.VariablesResourceType: | ||
if o.VariableFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.VariableFinder.FindVariableByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.OrganizationID, nil | ||
case influxdb.ScraperResourceType: | ||
if o.TargetFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.TargetFinder.GetTargetByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.OrgID, nil | ||
case influxdb.ChecksResourceType: | ||
if o.CheckFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.CheckFinder.FindCheckByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.GetOrgID(), nil | ||
case influxdb.NotificationEndpointResourceType: | ||
if o.NotificationEndpointFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.NotificationEndpointFinder.FindNotificationEndpointByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.GetOrgID(), nil | ||
case influxdb.NotificationRuleResourceType: | ||
if o.NotificationRuleFinder == nil { | ||
break | ||
} | ||
|
||
r, err := o.NotificationRuleFinder.FindNotificationRuleByID(ctx, id) | ||
if err != nil { | ||
return influxdb.InvalidID(), err | ||
} | ||
|
||
return r.GetOrgID(), nil | ||
} | ||
|
||
return influxdb.InvalidID(), &influxdb.Error{ | ||
Msg: fmt.Sprintf("unsupported resource type %s", rt), | ||
} | ||
} |
Oops, something went wrong.