diff --git a/app-config.yaml b/app-config.yaml
index 9df6540a2c..de5bec1f54 100644
--- a/app-config.yaml
+++ b/app-config.yaml
@@ -12,7 +12,7 @@ backend:
connection: ':memory:'
cors:
origin: http://localhost:3000
- methods: [GET, POST, PUT, DELETE]
+ methods: [GET, POST, PUT, DELETE, PATCH]
credentials: true
csp:
connect-src: ["'self'", 'http:', 'https:']
@@ -30,6 +30,14 @@ proxy:
Circle-Token:
$env: CIRCLECI_AUTH_TOKEN
+ '/splunk-on-call':
+ target: https://api.victorops.com/api-public
+ headers:
+ X-VO-Api-Id:
+ $env: SPLUNK_ON_CALL_API_ID
+ X-VO-Api-Key:
+ $env: SPLUNK_ON_CALL_API_KEY
+
'/jenkins/api':
target: http://localhost:8080
headers:
@@ -386,3 +394,5 @@ homepage:
timezone: 'Asia/Tokyo'
pagerduty:
eventsBaseUrl: 'https://events.pagerduty.com/v2'
+splunkoncall:
+ username: 'guest'
diff --git a/microsite/data/plugins/splunk-on-call.yaml b/microsite/data/plugins/splunk-on-call.yaml
new file mode 100644
index 0000000000..fb32293e31
--- /dev/null
+++ b/microsite/data/plugins/splunk-on-call.yaml
@@ -0,0 +1,13 @@
+---
+title: SplunkOnCall
+author: Spotify
+authorUrl: https://github.com/spotify
+category: Monitoring
+description: SplunkOnCall offers a simple way to identify incidents and escalation policies.
+documentation: https://github.com/backstage/backstage/tree/master/plugins/splunk-on-call
+iconUrl: data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIiBjbGFzcz0idm8tbGVhZi1ibGFjayI+PHBhdGggZD0iTTE1Ljk5OTcgMzJDMjQuODM2MSAzMiAzMiAyNC44MzY4IDMyIDE2LjAwMDJDMzIgNy4xNjM1NiAyNC44MzYxIDAgMTUuOTk5NyAwQzcuMTYzNCAwIDAgNy4xNjM1NiAwIDE2LjAwMDJDMCAyNC44MzY4IDcuMTYzNCAzMiAxNS45OTk3IDMyWk0yMi41Njc1IDE0LjY5MDRMMjMuNjI1OSAxNi41MTU4TDE4Ljg4NTEgMTguOTE0NUwxOC44MSAxOS43MTQxTDIyLjQwMzMgMTguNTc2MUwyMC41OTcyIDIwLjg0MzJMMjAuNDQ2MiAyMS41NjI4TDE4LjI0MzkgMjIuNTUyNUwxOC4wMTc2IDIzLjIzMjJMMTkuMDA0NSAyMi44MTU3TDE2LjM0MjIgMjUuOTEwNFYyOS42MDA0SDE1LjY1NzdWMjUuOTEwNEwxMi45OTU5IDIyLjgxNTdMMTMuOTgyOCAyMy4yMzIyTDEzLjc1NjYgMjIuNTUyNUwxMS41NTQ1IDIxLjU2MjhMMTEuNDAzNiAyMC44NDMyTDkuNTk2OTIgMTguNTc2MUwxMy4xOTA2IDE5LjcxNDFMMTMuMTE0OSAxOC45MTQ1TDguMzc0NDkgMTYuNTE1OEw5LjQzMzM5IDE0LjY5MDRMNy4yMDAyIDExLjUxODlMMTMuMzcxOCAxNC41MDA3TDEzLjQ5NyAxMy42MDM3TDExLjY5MzYgMTAuNjYyTDExLjk1MiAxMC4xNzc0TDExLjExOTUgNi43MTg2N0wxNC4zNTUzIDEwLjEyNjdMMTQuNTQ5MyA4LjI0NDU0TDEzLjU4MTggNS40MjI1M0wxNC44NzMgNS44NTYyNEwxNiAyLjQwMDM5TDE3LjEyNzMgNS44NTYyNEwxOC40MTg2IDUuNDIyNTNMMTcuNDUxMiA4LjI0NDU0TDE3LjY0NTQgMTAuMTI2N0wyMC44ODA3IDYuNzE4NjdMMjAuMDQ4MiAxMC4xNzc0TDIwLjMwNjggMTAuNjYyTDE4LjUwMzQgMTMuNjAzN0wxOC42Mjg4IDE0LjUwMDdMMjQuODAwMiAxMS41MTg5TDIyLjU2NzUgMTQuNjkwNFoiIGZpbGw9JyMyQzJDMkMnLz48L3N2Zz4K
+npmPackageName: '@backstage/plugin-splunk-on-call'
+tags:
+ - monitoring
+ - errors
+ - alerting
diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx
index 70fceb8a01..a349a0411e 100644
--- a/packages/app/src/App.tsx
+++ b/packages/app/src/App.tsx
@@ -80,6 +80,7 @@ const routes = (
path="/tech-radar"
element={}
/>
+ } />
} />
} />
+
+
+ );
+}
+```
+
+## Client configuration
+
+## Providing the API Token
+
+In order for the client to make requests to the [SplunkOnCall API](https://developer.splunkoncall.com/docs/rest-api-v2/rest-api/) it needs an [API Token](https://support.splunkoncall.com/docs/generating-api-keys#generating-a-general-access-rest-api-key).
+
+Then start the backend passing the token as an environment variable:
+
+```bash
+$ SPLUNK_ON_CALL_API_KEY='' SPLUNK_ON_CALL_API_ID='' yarn start
+```
+
+This will proxy the request by adding `X-VO-Api-Id` and `X-VO-Api-Key` headers with the provided values.
diff --git a/plugins/splunk-on-call/dev/index.tsx b/plugins/splunk-on-call/dev/index.tsx
new file mode 100644
index 0000000000..5a21c809ce
--- /dev/null
+++ b/plugins/splunk-on-call/dev/index.tsx
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2021 Spotify AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { createDevApp } from '@backstage/dev-utils';
+import { plugin } from '../src/plugin';
+
+createDevApp().registerPlugin(plugin).render();
diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json
new file mode 100644
index 0000000000..76f1bc941a
--- /dev/null
+++ b/plugins/splunk-on-call/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "@backstage/plugin-splunk-on-call",
+ "version": "0.1.1",
+ "main": "src/index.ts",
+ "types": "src/index.ts",
+ "license": "Apache-2.0",
+ "publishConfig": {
+ "access": "public",
+ "main": "dist/index.esm.js",
+ "types": "dist/index.d.ts"
+ },
+ "homepage": "https://backstage.io",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/backstage/backstage",
+ "directory": "plugins/splunk-on-call"
+ },
+ "keywords": [
+ "backstage",
+ "splunk-on-call"
+ ],
+ "scripts": {
+ "build": "backstage-cli plugin:build",
+ "start": "backstage-cli plugin:serve",
+ "lint": "backstage-cli lint",
+ "test": "backstage-cli test",
+ "diff": "backstage-cli plugin:diff",
+ "prepack": "backstage-cli prepack",
+ "postpack": "backstage-cli postpack",
+ "clean": "backstage-cli clean"
+ },
+ "dependencies": {
+ "@backstage/catalog-model": "^0.7.0",
+ "@backstage/core": "^0.5.0",
+ "@backstage/theme": "^0.2.2",
+ "@material-ui/core": "^4.11.0",
+ "@material-ui/icons": "^4.9.1",
+ "@material-ui/lab": "4.0.0-alpha.45",
+ "classnames": "^2.2.6",
+ "date-fns": "^2.15.0",
+ "react": "^16.13.1",
+ "react-dom": "^16.13.1",
+ "react-router-dom": "6.0.0-beta.0",
+ "react-use": "^15.3.3"
+ },
+ "devDependencies": {
+ "@backstage/cli": "^0.5.0",
+ "@backstage/dev-utils": "^0.1.8",
+ "@backstage/test-utils": "^0.1.6",
+ "@testing-library/jest-dom": "^5.10.1",
+ "@testing-library/react": "^10.4.1",
+ "@testing-library/user-event": "^12.0.7",
+ "@types/jest": "^26.0.7",
+ "@types/node": "^12.0.0",
+ "msw": "^0.21.2",
+ "node-fetch": "^2.6.1",
+ "cross-fetch": "^3.0.6"
+ },
+ "files": [
+ "dist"
+ ]
+}
diff --git a/plugins/splunk-on-call/src/assets/emptystate.svg b/plugins/splunk-on-call/src/assets/emptystate.svg
new file mode 100644
index 0000000000..fa7f19123e
--- /dev/null
+++ b/plugins/splunk-on-call/src/assets/emptystate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/plugins/splunk-on-call/src/index.ts b/plugins/splunk-on-call/src/index.ts
new file mode 100644
index 0000000000..2ff5936225
--- /dev/null
+++ b/plugins/splunk-on-call/src/index.ts
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export { plugin } from './plugin';
+export {
+ isPluginApplicableToEntity,
+ SplunkOnCallCard,
+} from './components/SplunkOnCallCard';
+export {
+ SplunkOnCallClient,
+ splunkOnCallApiRef,
+ UnauthorizedError,
+} from './api/client';
+
+export { SplunkOnCallPage as Router } from './components/SplunkOnCallPage';
diff --git a/plugins/splunk-on-call/src/plugin.test.ts b/plugins/splunk-on-call/src/plugin.test.ts
new file mode 100644
index 0000000000..e55229cab8
--- /dev/null
+++ b/plugins/splunk-on-call/src/plugin.test.ts
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { plugin } from './plugin';
+
+describe('splunkoncall', () => {
+ it('should export plugin', () => {
+ expect(plugin).toBeDefined();
+ });
+});
diff --git a/plugins/splunk-on-call/src/plugin.ts b/plugins/splunk-on-call/src/plugin.ts
new file mode 100644
index 0000000000..38235d5b48
--- /dev/null
+++ b/plugins/splunk-on-call/src/plugin.ts
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import {
+ createApiFactory,
+ createPlugin,
+ createRouteRef,
+ discoveryApiRef,
+ configApiRef,
+} from '@backstage/core';
+import { splunkOnCallApiRef, SplunkOnCallClient } from './api';
+
+export const rootRouteRef = createRouteRef({
+ path: '/splunk-on-call',
+ title: 'splunk-on-call',
+});
+
+export const plugin = createPlugin({
+ id: 'splunk-on-call',
+ apis: [
+ createApiFactory({
+ api: splunkOnCallApiRef,
+ deps: { discoveryApi: discoveryApiRef, configApi: configApiRef },
+ factory: ({ configApi, discoveryApi }) =>
+ SplunkOnCallClient.fromConfig(configApi, discoveryApi),
+ }),
+ ],
+});
diff --git a/plugins/splunk-on-call/src/setupTests.ts b/plugins/splunk-on-call/src/setupTests.ts
new file mode 100644
index 0000000000..0bfa67b49a
--- /dev/null
+++ b/plugins/splunk-on-call/src/setupTests.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import '@testing-library/jest-dom';