Add HTTP integration GraphQL query
What does this MR do?
Related to #321674 (closed)
Adds a new alertManagementHttpIntegration
to fetch information about a single HTTP Integration by ID.
alertManagementIntegration
query similar to alertManagementHttpIntegration
?
Why there is no Alert Management Integration consists of two kinds: HTTP Integrations and Prometheus integration. The last can only be present in a single copy and I think there is no need to filter it by ID when it's already fetched from the alertManagementIntegrations
query.
If we ignore filtering Prometheus integration in alertManagementIntegration
, then alertManagementIntegration
and alertManagementHttpIntegration
will do exactly the same job.
One may argue, in the future, we may have more integration types and alertManagementIntegration
is going to allow us to filter any of them by ID. I would suggest getting back to that discussion once we have more integration types.
GraphQL
Query
query Extract($fullPath: ID!, $id: AlertManagementHttpIntegrationID!) {
project(fullPath: $fullPath) {
alertManagementHttpIntegration(id: $id) {
id
active
name
payloadExample
payloadAttributeMappings {
fieldName
label
type
}
}
}
}
Query variables
{
"fullPath": "<PROJECT-FULL-PATH>",
"id": "gid://gitlab/AlertManagement::HttpIntegration/<ID>"
}
Screenshots (strongly suggested)
Does this MR meet the acceptance criteria?
Conformity
-
Does this MR need a changelog?-
I have included a changelog entry. -
I have not included a changelog entry because _____.
-
-
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides - [-] Database guides
-
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. - [-] Tested in all supported browsers
- [-] Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
- [-] Label as security and @ mention
@gitlab-com/gl-security/appsec
- [-] The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
- [-] Security reports checked/validated by a reviewer from the AppSec team
Merge request reports
Activity
changed milestone to %13.10
assigned to @ck3g
added documentation label
1 Warning This MR has a Changelog file outside ee/
, but code changes inee/
. Consider moving the Changelog file intoee/
.1 Message This merge request adds or changes documentation files. A review from the Technical Writing team before you merge is recommended. Reviews can happen after you merge. Documentation review
The following files require a review from a technical writer:
doc/api/graphql/reference/index.md
The review does not need to block merging this merge request. See the:
-
Metadata for the
*.md
files that you've changed. The first few lines of each*.md
file identify the stage and group most closely associated with your docs change. - The Technical Writer assigned for that stage and group.
- Documentation workflows for information on when to assign a merge request for review.
Reviewer roulette
Changes that require review have been detected! A merge request is normally reviewed by both a reviewer and a maintainer in its primary category (e.g. frontend or backend), and by a maintainer in all other categories.
To spread load more evenly across eligible reviewers, Danger has picked a candidate for each review slot, based on their timezone. Feel free to override these selections if you think someone else would be better-suited or use the GitLab Review Workload Dashboard to find other available reviewers.
To read more on how to use the reviewer roulette, please take a look at the Engineering workflow and code review guidelines. Please consider assigning a reviewer or maintainer who is a domain expert in the area of the merge request.
Once you've decided who will review this merge request, assign them as a reviewer! Danger does not automatically notify them for you.
Category Reviewer Maintainer backend Robert May ( @robotmay_gitlab
) (UTC+0, 1 hour behind@ck3g
)Dmitriy 'DZ' Zaporozhets ( @dzaporozhets
) (UTC+2, 1 hour ahead of@ck3g
)~changelog No reviewer available No maintainer available If needed, you can retry the
danger-review
job that generated this comment.Generated by
DangerEdited by 🤖 GitLab Bot 🤖added 2 commits
mentioned in merge request !54702 (closed)
@robotmay_gitlab could you please review? Thank
@robotmay_gitlab pinging. Maybe the previous notification got lost
Sorry for the delay @ck3g. I missed the previous message in a flurry of others
This looks good to me, though I'm not an expert in GraphQL. I'll pass this on to @alexkalderimis as I know he's more experienced in it than me
assigned to @robotmay_gitlab and unassigned @ck3g
requested review from @robotmay_gitlab
assigned to @alexkalderimis and unassigned @robotmay_gitlab
requested review from @alexkalderimis
mentioned in issue gitlab-com/www-gitlab-com#6605 (closed)
279 279 description: 'HTTP Integrations which can receive alerts for the project.', 280 280 resolver: Resolvers::AlertManagement::HttpIntegrationsResolver 281 281 282 field :alert_management_http_integration, We already have a field on the
ProjectType
that seems suitable for this:Project.alertManagementHttpIntegrations
(I notice we also haveProject.alertManagementIntegrations
- I am worried that we are accumulating several very similar fields onProject
that might be confusing to users.Did you consider other approaches here, such as adding filter arguments to
Project.alertManagementIntegrations
?I was considering two approaches here. The one with the separate
Project.alertManagementHttpIntegration
and another one is adding a new filtering argument to theProject.alertManagementHttpIntegrations
.I chose the new field approach due to its simplicity and single responsibility.
But I don't mind flipping the solution in favor of
Project.alertManagementHttpIntegrations
.I didn't add the field to
Project.alertManagementIntegrations
because (I was trying to explain that in the MR description) that field returns two kinds of integrations: HTTP Integrations and the Prometheus service.The Prometheus service in there is always a single record (or blank I guess). That, I think, makes filtering by ID is a little bit tricky, because we need to identify the type to which is that ID belongs. Then, if the ID belongs to Prometheus, it doesn't make sense to filter by its ID again, because it's always a single record. Here we can only filter by HTTP integrations, but I thought it's could be odd to dismiss one of the types.
Project.alertManagementHttpIntegrations
on the other hand is only focused on HTTP integration, which has a couple of specific pieces of information we need when we edit one of the integration's settings.I didn't add the field to
Project.alertManagementIntegrations
because (I was trying to explain that in the MR description) that field returns two kinds of integrations: HTTP Integrations and the Prometheus service.that is correct, but it doesn't seem like a large problem. We can distinguish which kind of integration this is with
id.model_class
.To filter by ID we need to get the ID. Get it
id.model_class
. Then check if the model class is::AlertManagement::HttpIntegration
.If it's an
HttpIntegration
we pass the integer ID to::AlertManagement::HttpIntegrationsFinder
to filter the HTTP Integrations. https://gitlab.com/gitlab-org/gitlab/-/blob/d3250ebe5506b66bb7d019841a1f66981456974b/app/graphql/resolvers/alert_management/integrations_resolver.rb#L25If it's not an
HttpIntegration
we compare theproject.prometheus_service
ID with the ID we have, if return the Prometheus service if IDs match.Did I understand that right?