Use single user counts endpoint

This commit is contained in:
shamoon 2024-11-21 19:14:38 -08:00
parent 4adf24dfa9
commit c7e796b681
4 changed files with 19 additions and 31 deletions

View File

@ -7,11 +7,14 @@ Learn more about [Gitlab](https://gitlab.com).
API requires a personal access token with either `read_api` or `api` permission. See the [gitlab documentation](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token) for details on generating one.
Allowed fields: `["events", "openIssues", "openMergeRequests"]`.
Your Gitlab user ID can be found on [your profile page](https://support.circleci.com/hc/en-us/articles/20761157174043-How-to-find-your-GitLab-User-ID).
Allowed fields: `["events", "issues", "merges", "projects"]`.
```yaml
widget:
type: gitlab
url: http://gitlab.host.or.ip:port
key: personal-access-token
user_id: 123456
```

View File

@ -1003,8 +1003,9 @@
"loading": "Loading"
},
"gitlab": {
"events": "Events",
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests"
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@ -8,29 +8,29 @@ export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: gitlabEvents, error: gitlabEventsError } = useWidgetAPI(widget, "events");
const { data: gitlabIssues, error: gitlabIssuesError } = useWidgetAPI(widget, "issues");
const { data: gitlabMerges, error: gitlabMergesError } = useWidgetAPI(widget, "merges");
const { data: gitlabCounts, error: gitlabCountsError } = useWidgetAPI(widget, "counts");
if (gitlabEventsError || gitlabIssuesError || gitlabMergesError) {
return <Container service={service} error={gitlabEventsError ?? gitlabIssuesError ?? gitlabMergesError} />;
if (gitlabCountsError) {
return <Container service={service} error={gitlabCountsError} />;
}
if (!gitlabEvents || !gitlabIssues || !gitlabMerges) {
if (!gitlabCounts) {
return (
<Container service={service}>
<Block label="gitlab.events" />
<Block label="gitlab.groups" />
<Block label="gitlab.issues" />
<Block label="gitlab.merges" />
<Block label="gitlab.projects" />
</Container>
);
}
return (
<Container service={service}>
<Block label="gitlab.events" value={t("common.number", { value: gitlabEvents.count })} />
<Block label="gitlab.issues" value={t("common.number", { value: gitlabIssues.count })} />
<Block label="gitlab.merges" value={t("common.number", { value: gitlabMerges.count })} />
<Block label="gitlab.groups" value={t("common.number", { value: gitlabCounts.groups_count })} />
<Block label="gitlab.issues" value={t("common.number", { value: gitlabCounts.issues_count })} />
<Block label="gitlab.merges" value={t("common.number", { value: gitlabCounts.merge_requests_count })} />
<Block label="gitlab.projects" value={t("common.number", { value: gitlabCounts.projects_count })} />
</Container>
);
}

View File

@ -1,27 +1,11 @@
import { asJson } from "utils/proxy/api-helpers";
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/v4/{endpoint}",
proxyHandler: credentialedProxyHandler,
mappings: {
events: {
endpoint: "events",
map: (data) => ({
count: asJson(data).length,
}),
},
issues: {
endpoint: "issues?state=opened",
map: (data) => ({
count: asJson(data).length,
}),
},
merges: {
endpoint: "merge_requests?state=opened",
map: (data) => ({
count: asJson(data).length,
}),
counts: {
endpoint: "users/{user_id}/associations_count",
},
},
};