diff --git a/packages/backend/src/apps/airbrake/dynamic-data/index.js b/packages/backend/src/apps/airbrake/dynamic-data/index.js new file mode 100644 index 00000000..ed07bb05 --- /dev/null +++ b/packages/backend/src/apps/airbrake/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listProjects from './list-projects/index.js'; + +export default [listProjects]; diff --git a/packages/backend/src/apps/airbrake/dynamic-data/list-projects/index.js b/packages/backend/src/apps/airbrake/dynamic-data/list-projects/index.js new file mode 100644 index 00000000..36a02386 --- /dev/null +++ b/packages/backend/src/apps/airbrake/dynamic-data/list-projects/index.js @@ -0,0 +1,23 @@ +export default { + name: 'List projects', + key: 'listProjects', + + async run($) { + const projects = { + data: [], + }; + + const { data } = await $.http.get('/api/v4/projects'); + + if (data.projects.length) { + for (const project of data.projects) { + projects.data.push({ + value: project.id, + name: project.name, + }); + } + } + + return projects; + }, +}; diff --git a/packages/backend/src/apps/airbrake/index.js b/packages/backend/src/apps/airbrake/index.js index 31d252f7..bc5792db 100644 --- a/packages/backend/src/apps/airbrake/index.js +++ b/packages/backend/src/apps/airbrake/index.js @@ -2,6 +2,8 @@ import defineApp from '../../helpers/define-app.js'; import setBaseUrl from './common/set-base-url.js'; import auth from './auth/index.js'; import addAuthToken from './common/add-auth-token.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Airbrake', @@ -14,4 +16,6 @@ export default defineApp({ primaryColor: 'f58c54', beforeRequest: [setBaseUrl, addAuthToken], auth, + triggers, + dynamicData, }); diff --git a/packages/backend/src/apps/airbrake/triggers/index.js b/packages/backend/src/apps/airbrake/triggers/index.js new file mode 100644 index 00000000..e9989945 --- /dev/null +++ b/packages/backend/src/apps/airbrake/triggers/index.js @@ -0,0 +1,3 @@ +import newErrors from './new-errors/index.js'; + +export default [newErrors]; diff --git a/packages/backend/src/apps/airbrake/triggers/new-errors/index.js b/packages/backend/src/apps/airbrake/triggers/new-errors/index.js new file mode 100644 index 00000000..a0473d5f --- /dev/null +++ b/packages/backend/src/apps/airbrake/triggers/new-errors/index.js @@ -0,0 +1,66 @@ +//import { URLSearchParams } from 'node:url'; +import defineTrigger from '../../../../helpers/define-trigger.js'; + +export default defineTrigger({ + name: 'New errors', + key: 'newErrors', + pollInterval: 15, + description: 'Triggers when a new error occurs.', + arguments: [ + { + label: 'Project', + key: 'projectId', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listProjects', + }, + ], + }, + }, + ], + + async run($) { + const projectId = $.step.parameters.projectId; + + const params = { + limit: 100, + page: 1, + }; + + let next = false; + do { + const { data } = await $.http.get( + `/api/v4/projects/${projectId}/groups`, + { params } + ); + + if (data.count > params.limit) { + params.page = params.page + 1; + next = true; + } else { + next = false; + } + + if (!data?.groups?.length) { + return; + } + + for (const group of data.groups) { + $.pushTriggerItem({ + raw: group, + meta: { + internalId: group.id, + }, + }); + } + } while (next); + }, +}); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index 363c0af3..d57a1239 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -36,7 +36,10 @@ export default defineConfig({ text: 'Airbrake', collapsible: true, collapsed: true, - items: [{ text: 'Connection', link: '/apps/airbrake/connection' }], + items: [ + { text: 'Triggers', link: '/apps/airbrake/triggers' }, + { text: 'Connection', link: '/apps/airbrake/connection' }, + ], }, { text: 'Carbone', diff --git a/packages/docs/pages/apps/airbrake/triggers.md b/packages/docs/pages/apps/airbrake/triggers.md new file mode 100644 index 00000000..47dd118e --- /dev/null +++ b/packages/docs/pages/apps/airbrake/triggers.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/airbrake.svg +items: + - name: New errors + desc: Triggers when a new error occurs. +--- + + + + diff --git a/packages/docs/pages/guide/available-apps.md b/packages/docs/pages/guide/available-apps.md index 90f8ba0a..db466405 100644 --- a/packages/docs/pages/guide/available-apps.md +++ b/packages/docs/pages/guide/available-apps.md @@ -3,6 +3,7 @@ The following integrations are currently supported by Automatisch. - [Carbone](/apps/carbone/actions) +- [Airbrake](/apps/airbrake/triggers) - [DeepL](/apps/deepl/actions) - [Delay](/apps/delay/actions) - [Discord](/apps/discord/actions)