mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 08:42:13 +02:00
Compare commits
321 Commits
7.0.2846
...
error-trac
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9b83202e58 | ||
|
|
3ca4d5d481 | ||
|
|
5c4d4b2c63 | ||
|
|
fd0a95d436 | ||
|
|
23c65cecf0 | ||
|
|
5c3dcf7bc9 | ||
|
|
108940678f | ||
|
|
3df72091a2 | ||
|
|
b1de73a16a | ||
|
|
f715b14b74 | ||
|
|
17eef6408e | ||
|
|
bc288100c0 | ||
|
|
c4a01058b7 | ||
|
|
cb10647285 | ||
|
|
fb8b00d383 | ||
|
|
4563f42794 | ||
|
|
a6072634f2 | ||
|
|
646908e66b | ||
|
|
ed150c1482 | ||
|
|
fac59332ed | ||
|
|
64725b3973 | ||
|
|
3636b160fb | ||
|
|
fee3264350 | ||
|
|
5bcd451bc8 | ||
|
|
7c2d6dc9e5 | ||
|
|
185eb20d1b | ||
|
|
cc7696f481 | ||
|
|
a3856588bb | ||
|
|
1a9668a877 | ||
|
|
92e519c49e | ||
|
|
3c296f72d8 | ||
|
|
f0e701c5bb | ||
|
|
7fa461e652 | ||
|
|
66b4fbded1 | ||
|
|
e7fc9bb9a5 | ||
|
|
2f3dbebe9a | ||
|
|
a6a5f189c3 | ||
|
|
67f1ad9ef1 | ||
|
|
4e7d1d5c7a | ||
|
|
b9dd9eb8de | ||
|
|
3c86293864 | ||
|
|
b202b07353 | ||
|
|
9db1c59893 | ||
|
|
ac7d4f974b | ||
|
|
6251dfe482 | ||
|
|
dbdca789d4 | ||
|
|
12e766e9d4 | ||
|
|
ba2a480d4f | ||
|
|
3b141d7e90 | ||
|
|
61541ac7c9 | ||
|
|
abde6ee7cb | ||
|
|
9aae86cc78 | ||
|
|
222027f2e0 | ||
|
|
adfb3e1db4 | ||
|
|
fe8aa54f1c | ||
|
|
5237384d08 | ||
|
|
aca766a252 | ||
|
|
ee29277cb9 | ||
|
|
310ca572ff | ||
|
|
3d13620a28 | ||
|
|
1c069c60fc | ||
|
|
7146b341c5 | ||
|
|
8f8e40aa71 | ||
|
|
0e9c752aae | ||
|
|
d37f8a4049 | ||
|
|
26dd72eea2 | ||
|
|
462105c6fd | ||
|
|
5662d45826 | ||
|
|
32ebb26960 | ||
|
|
235fed6f17 | ||
|
|
a51c0c45e4 | ||
|
|
8ea54108c1 | ||
|
|
cba6e9e2a0 | ||
|
|
bd1e1792e4 | ||
|
|
e5c9b20c64 | ||
|
|
8145f07e51 | ||
|
|
56654085a4 | ||
|
|
a6ddba16ec | ||
|
|
b3cf198649 | ||
|
|
4dd7285c13 | ||
|
|
5347b5c109 | ||
|
|
24b956c55f | ||
|
|
32c9d6d2df | ||
|
|
c883ce6a34 | ||
|
|
3851c1f963 | ||
|
|
dd5cb900ff | ||
|
|
47a4fe1937 | ||
|
|
0d0e64f633 | ||
|
|
cc432dfa1c | ||
|
|
0fd161d251 | ||
|
|
a6cb80f640 | ||
|
|
5dbd8b9b35 | ||
|
|
3df855c52a | ||
|
|
183ff170ae | ||
|
|
946e53b5c5 | ||
|
|
c8f8b79cea | ||
|
|
cf71ba0c72 | ||
|
|
90ffb7233d | ||
|
|
7742318b74 | ||
|
|
5a1705cf12 | ||
|
|
fe55d39d14 | ||
|
|
a820b53d65 | ||
|
|
d2a9d9fed4 | ||
|
|
c9a69db7f2 | ||
|
|
69dd24128a | ||
|
|
7c2238eac7 | ||
|
|
2e850ed6ab | ||
|
|
7e54fc33ae | ||
|
|
bc15416103 | ||
|
|
b61fb75e36 | ||
|
|
a2d2ed038b | ||
|
|
f36ea78168 | ||
|
|
14cf7f047f | ||
|
|
c64c3d7012 | ||
|
|
8cb15df390 | ||
|
|
32da3f7c94 | ||
|
|
9355f185a9 | ||
|
|
c53584e9d5 | ||
|
|
01be73612d | ||
|
|
99a80ab9b6 | ||
|
|
95dca8e8c6 | ||
|
|
eddc5f1845 | ||
|
|
c965c18943 | ||
|
|
3c20f424e9 | ||
|
|
0ef7ca93f8 | ||
|
|
ca7c55b557 | ||
|
|
a72373994a | ||
|
|
fc0071162e | ||
|
|
3eef55a29d | ||
|
|
aa5dc27427 | ||
|
|
900e567748 | ||
|
|
a88b14747c | ||
|
|
1619b23996 | ||
|
|
6ed7e19538 | ||
|
|
41a3bc8a72 | ||
|
|
2621dc7cc2 | ||
|
|
c40ec85ce3 | ||
|
|
ff6369389c | ||
|
|
9211c91510 | ||
|
|
3e778fe503 | ||
|
|
77308cd9b7 | ||
|
|
60a33b5b0c | ||
|
|
679649e7ac | ||
|
|
719272e360 | ||
|
|
ca7907973a | ||
|
|
86e5a33bd9 | ||
|
|
3eb6f4da5f | ||
|
|
dea6c55365 | ||
|
|
ce9e449ba1 | ||
|
|
12530a1d0d | ||
|
|
4e81ed92f2 | ||
|
|
21047e77b1 | ||
|
|
67a326e6af | ||
|
|
23318f093f | ||
|
|
805a9b928f | ||
|
|
63202cc51f | ||
|
|
bb646bbcf1 | ||
|
|
000012cd03 | ||
|
|
1ed9dfc429 | ||
|
|
491b89cbb4 | ||
|
|
bfc8619095 | ||
|
|
8ec5e4bb8a | ||
|
|
c0c596346c | ||
|
|
e27d47e5bb | ||
|
|
524863dff3 | ||
|
|
5bc054504a | ||
|
|
6fd43622a3 | ||
|
|
725a58d5fb | ||
|
|
9bf3856c95 | ||
|
|
5fc95eb02e | ||
|
|
3f7cfa3110 | ||
|
|
bca44b5faf | ||
|
|
02f91d26ff | ||
|
|
5221c20ee2 | ||
|
|
ea0d1a479f | ||
|
|
ea3c357be1 | ||
|
|
b1c3a9e3c8 | ||
|
|
9ec136bf78 | ||
|
|
c4611848e3 | ||
|
|
a096591c52 | ||
|
|
b29fb6e833 | ||
|
|
2e2ade0b16 | ||
|
|
525ad8c664 | ||
|
|
434c55f88f | ||
|
|
c968156fa7 | ||
|
|
36a0dad41c | ||
|
|
52630b16d1 | ||
|
|
7b994675c8 | ||
|
|
d0692ebc8f | ||
|
|
63197d263f | ||
|
|
13b1998261 | ||
|
|
29764ae7c7 | ||
|
|
5c3175f9e7 | ||
|
|
8caac12041 | ||
|
|
d84cf5b8ec | ||
|
|
a49709992c | ||
|
|
21b078040c | ||
|
|
70371a32af | ||
|
|
f45985e0ce | ||
|
|
f1d7e0d13f | ||
|
|
3f8a5291f0 | ||
|
|
e60b06d014 | ||
|
|
c9e67311e7 | ||
|
|
0b10880f58 | ||
|
|
d49a6ce009 | ||
|
|
9b8a5c9c43 | ||
|
|
9dc31fe536 | ||
|
|
0d40be3db1 | ||
|
|
6754167e57 | ||
|
|
3bf74edae4 | ||
|
|
8a77ae977e | ||
|
|
6fbca4b6cb | ||
|
|
5cf1a7f675 | ||
|
|
7339f4873b | ||
|
|
0872b1e8a2 | ||
|
|
8307f4deca | ||
|
|
0ac88b3679 | ||
|
|
2c5bbbb6da | ||
|
|
88216cdebb | ||
|
|
a24822bd56 | ||
|
|
8f4538a75c | ||
|
|
14be322ef7 | ||
|
|
b50f05b290 | ||
|
|
e215b5b1ba | ||
|
|
c93f58227f | ||
|
|
538e40c4ae | ||
|
|
4a03abe3d5 | ||
|
|
c218a6f209 | ||
|
|
a8f04a8204 | ||
|
|
642b1616ca | ||
|
|
9afbac2cbc | ||
|
|
b6b49a1255 | ||
|
|
1cd89851bb | ||
|
|
229b5cd772 | ||
|
|
2b1ad303d9 | ||
|
|
54b0f355dc | ||
|
|
10ed38197e | ||
|
|
cc4dab2dcf | ||
|
|
8852e2ab61 | ||
|
|
50b6a746f4 | ||
|
|
df8d2f25ee | ||
|
|
ee3de663b5 | ||
|
|
a4d1ed7f01 | ||
|
|
05a26d0b3f | ||
|
|
0a5094db37 | ||
|
|
2f2c4891e3 | ||
|
|
83cb3b66e0 | ||
|
|
63575f3065 | ||
|
|
bf031f64fa | ||
|
|
04f1cfe414 | ||
|
|
f11863df0f | ||
|
|
599fc23c1a | ||
|
|
fa03d9296c | ||
|
|
df9bb5184f | ||
|
|
ca7b06d4bc | ||
|
|
59d6ef240f | ||
|
|
5ae034ffdf | ||
|
|
be75960aff | ||
|
|
708f104dfc | ||
|
|
23c34cc71a | ||
|
|
3bf76168f1 | ||
|
|
3499850c6d | ||
|
|
273a153311 | ||
|
|
b248dc324d | ||
|
|
7d7b4110a7 | ||
|
|
262436f906 | ||
|
|
2c7b845cb6 | ||
|
|
3c9284915a | ||
|
|
ba97a1e14b | ||
|
|
e552a8130f | ||
|
|
1ed2548be2 | ||
|
|
5c697105f3 | ||
|
|
b2bdd5d1af | ||
|
|
72e0f200f7 | ||
|
|
3f0d75d799 | ||
|
|
519f2ef312 | ||
|
|
cfbe92e40a | ||
|
|
8ef66650fb | ||
|
|
07973e85a3 | ||
|
|
34ca901007 | ||
|
|
09883b1129 | ||
|
|
b94b775e46 | ||
|
|
1c3b7d9982 | ||
|
|
ff062cb6a2 | ||
|
|
2cabc922a0 | ||
|
|
b6aaea8ae4 | ||
|
|
886aa086ec | ||
|
|
6c44201e1c | ||
|
|
3a72c5d04f | ||
|
|
ea162322d2 | ||
|
|
222c857354 | ||
|
|
d2d705783e | ||
|
|
75a7308647 | ||
|
|
d61ade1eb4 | ||
|
|
55e1f6b504 | ||
|
|
8b95f2887c | ||
|
|
2bd1693d1f | ||
|
|
b1eaded3fd | ||
|
|
7e486d34ae | ||
|
|
c930caa2bb | ||
|
|
e654b65e71 | ||
|
|
a145b346a4 | ||
|
|
f090654ab6 | ||
|
|
c2e14c378b | ||
|
|
77996b2066 | ||
|
|
5fce72fe59 | ||
|
|
9f8764d741 | ||
|
|
9ce44cc416 | ||
|
|
738fb77773 | ||
|
|
a464723729 | ||
|
|
8f86a4651e | ||
|
|
84740444ec | ||
|
|
3881ad163c | ||
|
|
f7f43ed16c | ||
|
|
7e05939977 | ||
|
|
e5c608e20b | ||
|
|
8a41d48941 | ||
|
|
6286c203fe | ||
|
|
5271bcd49f | ||
|
|
75ad6697cd | ||
|
|
45d327e55d |
74
.github/workflows/compile.yml
vendored
74
.github/workflows/compile.yml
vendored
@@ -20,9 +20,6 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd CommonUI && npm install --force
|
||||
- run: cd Accounts && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-isolated-vm:
|
||||
@@ -35,35 +32,8 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd IsolatedVM && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-common-server:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-common-ui:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonUI && npm install --force && npm run compile && npm run dep-check
|
||||
|
||||
compile-common:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
@@ -73,8 +43,7 @@ jobs:
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install && npm run compile && npm run dep-check
|
||||
- run: cd Common && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-app:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -86,9 +55,7 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd CommonUI && npm install --force
|
||||
|
||||
- run: cd App && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-copilot:
|
||||
@@ -101,8 +68,6 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd Copilot && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-nginx:
|
||||
@@ -115,9 +80,7 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd CommonUI && npm install --force
|
||||
|
||||
- run: cd Nginx && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-infrastructure-agent:
|
||||
@@ -141,9 +104,7 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd CommonUI && npm install --force
|
||||
|
||||
- run: cd AdminDashboard && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-dashboard:
|
||||
@@ -156,25 +117,10 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd CommonUI && npm install --force
|
||||
|
||||
- run: cd Dashboard && npm install && npm run compile && npm run dep-check
|
||||
|
||||
|
||||
compile-model:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd Model && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-e2e:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
@@ -197,8 +143,6 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd Probe && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-ingestor:
|
||||
@@ -211,8 +155,6 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd Ingestor && npm install && npm run compile && npm run dep-check
|
||||
|
||||
|
||||
@@ -226,9 +168,7 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd CommonUI && npm install --force
|
||||
|
||||
- run: cd StatusPage && npm install && npm run compile && npm run dep-check
|
||||
|
||||
compile-test-server:
|
||||
@@ -241,6 +181,4 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd TestServer && npm install && npm run compile && npm run dep-check
|
||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -1133,7 +1133,7 @@ jobs:
|
||||
test-e2e-release-self-hosted:
|
||||
runs-on: ubuntu-latest
|
||||
# After all the jobs runs
|
||||
needs: [copilot-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, haraka-docker-image-deploy, ingestor-docker-image-deploy, isolated-vm-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy]
|
||||
needs: [copilot-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, haraka-docker-image-deploy, ingestor-docker-image-deploy, isolated-vm-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy]
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
|
||||
2
.github/workflows/reliability-copilot.yml
vendored
2
.github/workflows/reliability-copilot.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
|
||||
# Run Reliability Copilot in Doker Container
|
||||
# Run Reliability Copilot in Docker Container
|
||||
- name: Run Copilot
|
||||
run: |
|
||||
docker run --rm \
|
||||
|
||||
4
.github/workflows/test-release.yaml
vendored
4
.github/workflows/test-release.yaml
vendored
@@ -1067,7 +1067,7 @@ jobs:
|
||||
- name: Wait for server to start
|
||||
run: bash ./Tests/Scripts/status-check.sh http://localhost
|
||||
- name: Run E2E Tests. Run docker container e2e in docker compose file
|
||||
run: export $(grep -v '^#' config.env | xargs) && docker-compose -f docker-compose.dev.yml up --exit-code-from e2e --abort-on-container-exit e2e || (docker-compose -f docker-compose.dev.yml logs e2e && exit 1)
|
||||
run: export $(grep -v '^#' config.env | xargs) && docker compose -f docker-compose.dev.yml up --exit-code-from e2e --abort-on-container-exit e2e || (docker compose -f docker-compose.dev.yml logs e2e && exit 1)
|
||||
- name: Upload test results
|
||||
uses: actions/upload-artifact@v4
|
||||
# Run this on failure
|
||||
@@ -1120,7 +1120,7 @@ jobs:
|
||||
- name: Wait for server to start
|
||||
run: bash ./Tests/Scripts/status-check.sh http://localhost
|
||||
- name: Run E2E Tests. Run docker container e2e in docker compose file
|
||||
run: export $(grep -v '^#' config.env | xargs) && docker-compose -f docker-compose.dev.yml up --exit-code-from e2e --abort-on-container-exit e2e || (docker-compose -f docker-compose.dev.yml logs e2e && exit 1)
|
||||
run: export $(grep -v '^#' config.env | xargs) && docker compose -f docker-compose.dev.yml up --exit-code-from e2e --abort-on-container-exit e2e || (docker compose -f docker-compose.dev.yml logs e2e && exit 1)
|
||||
- name: Upload test results
|
||||
uses: actions/upload-artifact@v4
|
||||
# Run this on failure
|
||||
|
||||
24
.github/workflows/test.common-server.yaml
vendored
24
.github/workflows/test.common-server.yaml
vendored
@@ -1,24 +0,0 @@
|
||||
name: Common Server Test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'hotfix-*' # excludes hotfix branches
|
||||
- 'release'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd CommonServer && bash test-setup.sh
|
||||
- run: export $(grep -v '^#' config.env | xargs) && cd CommonServer && rm -rf build && npm run test
|
||||
7
.github/workflows/test.common.yaml
vendored
7
.github/workflows/test.common.yaml
vendored
@@ -12,11 +12,12 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
BILLING_PRIVATE_KEY: ${{secrets.TEST_BILLING_PRIVATE_KEY}}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Model && npm install
|
||||
- run: cd Common && npm install && npm run test
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && bash test-setup.sh
|
||||
- run: cd Common && npm install && rm -rf build && npm run test
|
||||
|
||||
23
.github/workflows/test.commonui.yaml
vendored
23
.github/workflows/test.commonui.yaml
vendored
@@ -1,23 +0,0 @@
|
||||
name: CommonUI Test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'hotfix-*' # excludes hotfix branches
|
||||
- 'release'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd CommonUI && npm install --force && npm run test
|
||||
|
||||
23
.github/workflows/test.model.yaml
vendored
23
.github/workflows/test.model.yaml
vendored
@@ -1,23 +0,0 @@
|
||||
name: Model Test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'hotfix-*' # excludes hotfix branches
|
||||
- 'release'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI_PIPELINE_ID: ${{github.run_number}}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd Model && npm install
|
||||
- run: cd Model && npm install && npm run test
|
||||
|
||||
1
.github/workflows/test.probe.yaml
vendored
1
.github/workflows/test.probe.yaml
vendored
@@ -18,7 +18,6 @@ jobs:
|
||||
with:
|
||||
node-version: 18.3.0
|
||||
- run: cd Common && npm install
|
||||
- run: cd CommonServer && npm install
|
||||
- run: cd Probe && npm install
|
||||
- run: cd Probe && npm run test
|
||||
|
||||
@@ -51,6 +51,3 @@ licenses/*
|
||||
certifications/*
|
||||
ApiReference/public/assets/*
|
||||
JavaScriptSDK/src/cli/server-monitor/out/scripts/prettify/*
|
||||
|
||||
|
||||
CommonServer/Tests/TestingUtils/__mocks__/Stripe.mock.ts
|
||||
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@@ -218,12 +218,12 @@
|
||||
"autoAttachChildProcesses": true
|
||||
},
|
||||
{
|
||||
"name": "CommonServer: Debug Tests",
|
||||
"name": "Common: Debug Tests",
|
||||
"type": "node",
|
||||
"restart": true,
|
||||
"autoAttachChildProcesses": true,
|
||||
"request": "launch",
|
||||
"cwd": "${workspaceRoot}/CommonServer",
|
||||
"cwd": "${workspaceRoot}/Common",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": [
|
||||
"run-script",
|
||||
|
||||
@@ -36,33 +36,17 @@ COPY ./Common /usr/src/Common
|
||||
|
||||
|
||||
|
||||
WORKDIR /usr/src/Model
|
||||
COPY ./Model/package*.json /usr/src/Model/
|
||||
# Set version in ./Model/package.json to the APP_VERSION
|
||||
RUN sed -i "s/\"version\": \".*\"/\"version\": \"$APP_VERSION\"/g" /usr/src/Model/package.json
|
||||
RUN npm install
|
||||
COPY ./Model /usr/src/Model
|
||||
|
||||
|
||||
|
||||
WORKDIR /usr/src/CommonServer
|
||||
COPY ./CommonServer/package*.json /usr/src/CommonServer/
|
||||
# Set version in ./CommonServer/package.json to the APP_VERSION
|
||||
RUN sed -i "s/\"version\": \".*\"/\"version\": \"$APP_VERSION\"/g" /usr/src/CommonServer/package.json
|
||||
RUN npm install
|
||||
COPY ./CommonServer /usr/src/CommonServer
|
||||
|
||||
|
||||
|
||||
|
||||
# Install CommonUI
|
||||
|
||||
WORKDIR /usr/src/CommonUI
|
||||
COPY ./CommonUI/package*.json /usr/src/CommonUI/
|
||||
# Set version in ./CommonUI/package.json to the APP_VERSION
|
||||
RUN sed -i "s/\"version\": \".*\"/\"version\": \"$APP_VERSION\"/g" /usr/src/CommonUI/package.json
|
||||
RUN npm install --force
|
||||
COPY ./CommonUI /usr/src/CommonUI
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { PromiseVoidFunction } from "Common/Types/FunctionTypes";
|
||||
import Express, { ExpressApplication } from "CommonServer/Utils/Express";
|
||||
import logger from "CommonServer/Utils/Logger";
|
||||
import App from "CommonServer/Utils/StartServer";
|
||||
import Express, { ExpressApplication } from "Common/Server/Utils/Express";
|
||||
import logger from "Common/Server/Utils/Logger";
|
||||
import App from "Common/Server/Utils/StartServer";
|
||||
|
||||
export const APP_NAME: string = "accounts";
|
||||
|
||||
|
||||
130
Accounts/package-lock.json
generated
130
Accounts/package-lock.json
generated
@@ -9,13 +9,11 @@
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"Common": "file:../Common",
|
||||
"CommonServer": "file:../CommonServer",
|
||||
"CommonUI": "file:../CommonUI",
|
||||
|
||||
"css-loader": "^6.11.0",
|
||||
"dotenv": "^16.4.5",
|
||||
"express": "^4.19.2",
|
||||
"file-loader": "^6.2.0",
|
||||
"Model": "file:../Model",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-router-dom": "^6.23.1",
|
||||
@@ -39,25 +37,81 @@
|
||||
"version": "1.0.0",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.24.6",
|
||||
"@monaco-editor/react": "^4.4.6",
|
||||
"@nivo/core": "^0.87.0",
|
||||
"@nivo/line": "^0.87.0",
|
||||
"@opentelemetry/api": "^1.9.0",
|
||||
"@opentelemetry/context-zone": "^1.25.0",
|
||||
"@opentelemetry/exporter-trace-otlp-http": "^0.52.0",
|
||||
"@opentelemetry/instrumentation": "^0.52.0",
|
||||
"@opentelemetry/instrumentation-fetch": "^0.52.1",
|
||||
"@opentelemetry/instrumentation-xml-http-request": "^0.52.1",
|
||||
"@opentelemetry/resources": "^1.25.0",
|
||||
"@opentelemetry/sdk-trace-web": "^1.23.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.25.0",
|
||||
"@tippyjs/react": "^4.2.6",
|
||||
"@types/crypto-js": "^4.2.2",
|
||||
"@types/qrcode": "^1.5.5",
|
||||
"@types/react-highlight": "^0.12.8",
|
||||
"@types/react-syntax-highlighter": "^15.5.13",
|
||||
"@types/uuid": "^8.3.4",
|
||||
"axios": "^1.6.8",
|
||||
"axios": "^1.7.2",
|
||||
"Common": "file:../Common",
|
||||
"crypto-js": "^4.1.1",
|
||||
"formik": "^2.4.6",
|
||||
"history": "^5.3.0",
|
||||
"json5": "^2.2.3",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.30.1",
|
||||
"moment-timezone": "^0.5.45",
|
||||
"posthog-js": "^1.116.6",
|
||||
"posthog-js": "^1.139.6",
|
||||
"prop-types": "^15.8.1",
|
||||
"qrcode": "^1.5.3",
|
||||
"react": "^18.3.1",
|
||||
"react-beautiful-dnd": "^13.1.1",
|
||||
"react-big-calendar": "^1.13.0",
|
||||
"react-color": "^2.19.3",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-dropzone": "^14.2.2",
|
||||
"react-error-boundary": "^4.0.13",
|
||||
"react-highlight": "^0.15.0",
|
||||
"react-markdown": "^8.0.3",
|
||||
"react-router-dom": "^6.24.1",
|
||||
"react-select": "^5.4.0",
|
||||
"react-spinners": "^0.14.1",
|
||||
"react-syntax-highlighter": "^15.5.0",
|
||||
"react-toggle": "^4.1.3",
|
||||
"reactflow": "^11.11.4",
|
||||
"reflect-metadata": "^0.2.2",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"slugify": "^1.6.5",
|
||||
"socket.io-client": "^4.7.5",
|
||||
"tippy.js": "^6.3.7",
|
||||
"typeorm": "^0.3.20",
|
||||
"universal-cookie": "^4.0.4",
|
||||
"use-async-effect": "^2.2.6",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@faker-js/faker": "^8.0.2",
|
||||
"@types/jest": "^27.5.2",
|
||||
"@types/node": "^17.0.22",
|
||||
"jest": "^27.5.1",
|
||||
"ts-jest": "^27.1.4"
|
||||
"@testing-library/jest-dom": "^5.16.5",
|
||||
"@testing-library/react": "^13.3.0",
|
||||
"@testing-library/user-event": "^14.4.3",
|
||||
"@types/jest": "^28.1.4",
|
||||
"@types/lodash": "^4.14.202",
|
||||
"@types/node": "^17.0.45",
|
||||
"@types/react": "^18.2.38",
|
||||
"@types/react-beautiful-dnd": "^13.1.2",
|
||||
"@types/react-big-calendar": "^1.8.5",
|
||||
"@types/react-color": "^3.0.6",
|
||||
"@types/react-test-renderer": "^18.0.0",
|
||||
"@types/react-toggle": "^4.0.3",
|
||||
"jest": "^28.1.1",
|
||||
"jest-environment-jsdom": "^29.7.0",
|
||||
"react-test-renderer": "^18.2.0",
|
||||
"ts-jest": "^28.0.5"
|
||||
}
|
||||
},
|
||||
"../CommonServer": {
|
||||
@@ -78,6 +132,7 @@
|
||||
"@opentelemetry/sdk-metrics": "^1.21.0",
|
||||
"@opentelemetry/sdk-node": "^0.48.0",
|
||||
"@opentelemetry/sdk-trace-node": "^1.21.0",
|
||||
"@types/crypto-js": "^4.2.2",
|
||||
"acme-client": "^5.3.0",
|
||||
"airtable": "^0.12.2",
|
||||
"bullmq": "^5.3.3",
|
||||
@@ -85,17 +140,19 @@
|
||||
"cookie-parser": "^1.4.6",
|
||||
"cors": "^2.8.5",
|
||||
"cron-parser": "^4.8.1",
|
||||
"crypto-js": "^4.2.0",
|
||||
"dotenv": "^16.4.4",
|
||||
"ejs": "^3.1.10",
|
||||
"express": "^4.19.2",
|
||||
"ioredis": "^5.3.2",
|
||||
"json2csv": "^5.0.7",
|
||||
"jsonwebtoken": "^9.0.0",
|
||||
"markdown-it": "^13.0.1",
|
||||
"Model": "file:../Model",
|
||||
"marked": "^12.0.2",
|
||||
"node-cron": "^3.0.3",
|
||||
"nodemailer": "^6.9.10",
|
||||
"otpauth": "^9.3.1",
|
||||
"pg": "^8.7.3",
|
||||
"redis-semaphore": "^5.5.1",
|
||||
"socket.io": "^4.7.4",
|
||||
"stripe": "^10.17.0",
|
||||
"twilio": "^4.22.0",
|
||||
@@ -111,7 +168,6 @@
|
||||
"@types/jest": "^27.4.1",
|
||||
"@types/json2csv": "^5.0.3",
|
||||
"@types/jsonwebtoken": "^8.5.9",
|
||||
"@types/markdown-it": "^12.2.3",
|
||||
"@types/node": "^17.0.22",
|
||||
"@types/node-cron": "^3.0.7",
|
||||
"@types/nodemailer": "^6.4.7",
|
||||
@@ -123,44 +179,49 @@
|
||||
"../CommonUI": {
|
||||
"name": "@oneuptime/common-ui",
|
||||
"version": "1.0.0",
|
||||
"extraneous": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.24.1",
|
||||
"@babel/runtime": "^7.24.6",
|
||||
"@monaco-editor/react": "^4.4.6",
|
||||
"@nivo/core": "^0.85.1",
|
||||
"@nivo/line": "^0.85.1",
|
||||
"@opentelemetry/api": "^1.8.0",
|
||||
"@opentelemetry/context-zone": "^1.22.0",
|
||||
"@opentelemetry/exporter-trace-otlp-http": "^0.49.1",
|
||||
"@opentelemetry/instrumentation": "^0.49.1",
|
||||
"@opentelemetry/instrumentation-fetch": "^0.49.1",
|
||||
"@opentelemetry/instrumentation-xml-http-request": "^0.49.1",
|
||||
"@opentelemetry/resources": "^1.21.0",
|
||||
"@opentelemetry/sdk-trace-web": "^1.21.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.21.0",
|
||||
"@nivo/core": "^0.87.0",
|
||||
"@nivo/line": "^0.87.0",
|
||||
"@opentelemetry/api": "^1.9.0",
|
||||
"@opentelemetry/context-zone": "^1.25.0",
|
||||
"@opentelemetry/exporter-trace-otlp-http": "^0.52.0",
|
||||
"@opentelemetry/instrumentation": "^0.52.0",
|
||||
"@opentelemetry/instrumentation-fetch": "^0.52.0",
|
||||
"@opentelemetry/instrumentation-xml-http-request": "^0.52.1",
|
||||
"@opentelemetry/resources": "^1.25.0",
|
||||
"@opentelemetry/sdk-trace-web": "^1.23.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.25.0",
|
||||
"@tippyjs/react": "^4.2.6",
|
||||
"@types/react-highlight": "^0.12.8",
|
||||
"@types/react-syntax-highlighter": "^15.5.13",
|
||||
"Common": "file:../Common",
|
||||
"formik": "^2.2.9",
|
||||
"CommonProject": "file:../CommonProject",
|
||||
"formik": "^2.4.6",
|
||||
"history": "^5.3.0",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"Model": "file:../Model",
|
||||
"moment-timezone": "^0.5.45",
|
||||
"prop-types": "^15.8.1",
|
||||
"react": "^18.2.0",
|
||||
"react": "^18.3.1",
|
||||
"react-beautiful-dnd": "^13.1.1",
|
||||
"react-big-calendar": "^1.11.2",
|
||||
"react-big-calendar": "^1.13.0",
|
||||
"react-color": "^2.19.3",
|
||||
"react-dom": "^18.1.0",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-dropzone": "^14.2.2",
|
||||
"react-error-boundary": "^4.0.13",
|
||||
"react-highlight": "^0.15.0",
|
||||
"react-markdown": "^8.0.3",
|
||||
"react-router-dom": "^6.22.3",
|
||||
"react-router-dom": "^6.23.1",
|
||||
"react-select": "^5.4.0",
|
||||
"react-spinners": "^0.13.6",
|
||||
"react-syntax-highlighter": "^15.5.0",
|
||||
"react-toggle": "^4.1.3",
|
||||
"reactflow": "^11.10.4",
|
||||
"reactflow": "^11.11.1",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"socket.io-client": "^4.7.5",
|
||||
"tippy.js": "^6.3.7",
|
||||
@@ -190,6 +251,7 @@
|
||||
"../Model": {
|
||||
"name": "@oneuptime/model",
|
||||
"version": "1.0.0",
|
||||
"extraneous": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"Common": "file:../Common",
|
||||
@@ -898,10 +960,6 @@
|
||||
"resolved": "../CommonServer",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/CommonUI": {
|
||||
"resolved": "../CommonUI",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
@@ -1742,10 +1800,6 @@
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/Model": {
|
||||
"resolved": "../Model",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
|
||||
@@ -27,13 +27,10 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"Common": "file:../Common",
|
||||
"CommonServer": "file:../CommonServer",
|
||||
"CommonUI": "file:../CommonUI",
|
||||
"css-loader": "^6.11.0",
|
||||
"dotenv": "^16.4.5",
|
||||
"express": "^4.19.2",
|
||||
"file-loader": "^6.2.0",
|
||||
"Model": "file:../Model",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-router-dom": "^6.23.1",
|
||||
|
||||
@@ -5,7 +5,7 @@ import NotFound from "./Pages/NotFound";
|
||||
import RegisterPage from "./Pages/Register";
|
||||
import ResetPasswordPage from "./Pages/ResetPassword";
|
||||
import VerifyEmail from "./Pages/VerifyEmail";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import React, { ReactElement } from "react";
|
||||
import {
|
||||
Route,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import App from "./App";
|
||||
import Telemetry from "CommonUI/src/Utils/Telemetry";
|
||||
import Telemetry from "Common/UI/Utils/Telemetry";
|
||||
import React from "react";
|
||||
import ReactDOM from "react-dom/client";
|
||||
import { BrowserRouter } from "react-router-dom";
|
||||
|
||||
Telemetry.init({
|
||||
serviceName: "Accounts",
|
||||
serviceName: "accounts",
|
||||
});
|
||||
|
||||
const root: any = ReactDOM.createRoot(
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { FORGOT_PASSWORD_API_URL } from "../Utils/ApiPaths";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import URL from "Common/Types/API/URL";
|
||||
import ModelForm, { FormType } from "CommonUI/src/Components/Forms/ModelForm";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "CommonUI/src/Components/Link/Link";
|
||||
import OneUptimeLogo from "CommonUI/src/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import User from "Model/Models/User";
|
||||
import ModelForm, { FormType } from "Common/UI/Components/Forms/ModelForm";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "Common/UI/Components/Link/Link";
|
||||
import OneUptimeLogo from "Common/UI/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import React, { useState } from "react";
|
||||
|
||||
const ForgotPassword: () => JSX.Element = () => {
|
||||
|
||||
@@ -1,19 +1,28 @@
|
||||
import { LOGIN_API_URL } from "../Utils/ApiPaths";
|
||||
import {
|
||||
LOGIN_API_URL,
|
||||
VERIFY_TWO_FACTOR_AUTH_API_URL,
|
||||
} from "../Utils/ApiPaths";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import URL from "Common/Types/API/URL";
|
||||
import { JSONObject } from "Common/Types/JSON";
|
||||
import ModelForm, { FormType } from "CommonUI/src/Components/Forms/ModelForm";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "CommonUI/src/Components/Link/Link";
|
||||
import { DASHBOARD_URL } from "CommonUI/src/Config";
|
||||
import OneUptimeLogo from "CommonUI/src/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import UiAnalytics from "CommonUI/src/Utils/Analytics";
|
||||
import LoginUtil from "CommonUI/src/Utils/Login";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import UserUtil from "CommonUI/src/Utils/User";
|
||||
import User from "Model/Models/User";
|
||||
import { JSONArray, JSONObject } from "Common/Types/JSON";
|
||||
import ModelForm, { FormType } from "Common/UI/Components/Forms/ModelForm";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "Common/UI/Components/Link/Link";
|
||||
import { DASHBOARD_URL } from "Common/UI/Config";
|
||||
import OneUptimeLogo from "Common/UI/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import UiAnalytics from "Common/UI/Utils/Analytics";
|
||||
import LoginUtil from "Common/UI/Utils/Login";
|
||||
import UserTwoFactorAuth from "Common/Models/DatabaseModels/UserTwoFactorAuth";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import UserUtil from "Common/UI/Utils/User";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import React from "react";
|
||||
import useAsyncEffect from "use-async-effect";
|
||||
import StaticModelList from "Common/UI/Components/ModelList/StaticModelList";
|
||||
import BasicForm from "Common/UI/Components/Forms/BasicForm";
|
||||
import API from "Common/UI/Utils/API/API";
|
||||
import HTTPErrorResponse from "Common/Types/API/HTTPErrorResponse";
|
||||
import HTTPResponse from "Common/Types/API/HTTPResponse";
|
||||
|
||||
const LoginPage: () => JSX.Element = () => {
|
||||
const apiUrl: URL = LOGIN_API_URL;
|
||||
@@ -24,6 +33,22 @@ const LoginPage: () => JSX.Element = () => {
|
||||
|
||||
const [initialValues, setInitialValues] = React.useState<JSONObject>({});
|
||||
|
||||
const [showTwoFactorAuth, setShowTwoFactorAuth] =
|
||||
React.useState<boolean>(false);
|
||||
|
||||
const [twoFactorAuthList, setTwoFactorAuthList] = React.useState<
|
||||
UserTwoFactorAuth[]
|
||||
>([]);
|
||||
|
||||
const [selectedTwoFactorAuth, setSelectedTwoFactorAuth] = React.useState<
|
||||
UserTwoFactorAuth | undefined
|
||||
>(undefined);
|
||||
|
||||
const [isTwoFactorAuthLoading, setIsTwoFactorAuthLoading] =
|
||||
React.useState<boolean>(false);
|
||||
const [twofactorAuthError, setTwoFactorAuthError] =
|
||||
React.useState<string>("");
|
||||
|
||||
useAsyncEffect(async () => {
|
||||
if (Navigation.getQueryStringByName("email")) {
|
||||
setInitialValues({
|
||||
@@ -32,6 +57,20 @@ const LoginPage: () => JSX.Element = () => {
|
||||
}
|
||||
}, []);
|
||||
|
||||
type LoginFunction = (user: User, miscData: JSONObject) => void;
|
||||
|
||||
const login: LoginFunction = (user: User, miscData: JSONObject): void => {
|
||||
if (user instanceof User && user && user.email) {
|
||||
UiAnalytics.userAuth(user.email);
|
||||
UiAnalytics.capture("accounts/login");
|
||||
}
|
||||
|
||||
LoginUtil.login({
|
||||
user: user,
|
||||
token: miscData ? miscData["token"] : undefined,
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex min-h-full flex-col justify-center py-12 sm:px-6 lg:px-8">
|
||||
<div className="">
|
||||
@@ -40,89 +79,211 @@ const LoginPage: () => JSX.Element = () => {
|
||||
src={OneUptimeLogo}
|
||||
alt="OneUptime"
|
||||
/>
|
||||
<h2 className="mt-6 text-center text-2xl tracking-tight text-gray-900">
|
||||
Sign in to your account
|
||||
</h2>
|
||||
<p className="mt-2 text-center text-sm text-gray-600">
|
||||
Join thousands of business that use OneUptime to help them stay online
|
||||
all the time.
|
||||
</p>
|
||||
{!showTwoFactorAuth && (
|
||||
<>
|
||||
<h2 className="mt-6 text-center text-2xl tracking-tight text-gray-900">
|
||||
Sign in to your account
|
||||
</h2>
|
||||
<p className="mt-2 text-center text-sm text-gray-600">
|
||||
Join thousands of business that use OneUptime to help them stay
|
||||
online all the time.
|
||||
</p>
|
||||
</>
|
||||
)}
|
||||
|
||||
{showTwoFactorAuth && (
|
||||
<>
|
||||
<h2 className="mt-6 text-center text-2xl tracking-tight text-gray-900">
|
||||
Two Factor Authentication
|
||||
</h2>
|
||||
<p className="mt-2 text-center text-sm text-gray-600">
|
||||
Select two factor authentication method. You will be asked to
|
||||
enter a code from the selected method.
|
||||
</p>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="mt-8 sm:mx-auto sm:w-full sm:max-w-md">
|
||||
<div className="bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10">
|
||||
<ModelForm<User>
|
||||
modelType={User}
|
||||
id="login-form"
|
||||
name="Login"
|
||||
fields={[
|
||||
{
|
||||
field: {
|
||||
email: true,
|
||||
{!showTwoFactorAuth && (
|
||||
<ModelForm<User>
|
||||
modelType={User}
|
||||
id="login-form"
|
||||
name="Login"
|
||||
fields={[
|
||||
{
|
||||
field: {
|
||||
email: true,
|
||||
},
|
||||
fieldType: FormFieldSchemaType.Email,
|
||||
placeholder: "jeff@example.com",
|
||||
required: true,
|
||||
disabled: Boolean(initialValues && initialValues["email"]),
|
||||
title: "Email",
|
||||
dataTestId: "email",
|
||||
},
|
||||
fieldType: FormFieldSchemaType.Email,
|
||||
placeholder: "jeff@example.com",
|
||||
required: true,
|
||||
disabled: Boolean(initialValues && initialValues["email"]),
|
||||
title: "Email",
|
||||
dataTestId: "email",
|
||||
},
|
||||
{
|
||||
field: {
|
||||
password: true,
|
||||
{
|
||||
field: {
|
||||
password: true,
|
||||
},
|
||||
title: "Password",
|
||||
required: true,
|
||||
validation: {
|
||||
minLength: 6,
|
||||
},
|
||||
fieldType: FormFieldSchemaType.Password,
|
||||
sideLink: {
|
||||
text: "Forgot password?",
|
||||
url: new Route("/accounts/forgot-password"),
|
||||
openLinkInNewTab: false,
|
||||
},
|
||||
dataTestId: "password",
|
||||
},
|
||||
title: "Password",
|
||||
required: true,
|
||||
validation: {
|
||||
minLength: 6,
|
||||
},
|
||||
fieldType: FormFieldSchemaType.Password,
|
||||
sideLink: {
|
||||
text: "Forgot password?",
|
||||
url: new Route("/accounts/forgot-password"),
|
||||
openLinkInNewTab: false,
|
||||
},
|
||||
dataTestId: "password",
|
||||
},
|
||||
]}
|
||||
createOrUpdateApiUrl={apiUrl}
|
||||
formType={FormType.Create}
|
||||
submitButtonText={"Login"}
|
||||
onSuccess={(value: User, miscData: JSONObject | undefined) => {
|
||||
if (value && value.email) {
|
||||
UiAnalytics.userAuth(value.email);
|
||||
UiAnalytics.capture("accounts/login");
|
||||
}
|
||||
]}
|
||||
createOrUpdateApiUrl={apiUrl}
|
||||
formType={FormType.Create}
|
||||
submitButtonText={"Login"}
|
||||
onBeforeCreate={(data: User) => {
|
||||
setInitialValues(User.toJSON(data, User));
|
||||
return Promise.resolve(data);
|
||||
}}
|
||||
onSuccess={(
|
||||
value: User | JSONObject,
|
||||
miscData: JSONObject | undefined,
|
||||
) => {
|
||||
if (
|
||||
miscData &&
|
||||
(miscData as JSONObject)["twoFactorAuth"] === true
|
||||
) {
|
||||
const twoFactorAuthList: Array<UserTwoFactorAuth> =
|
||||
UserTwoFactorAuth.fromJSONArray(
|
||||
(miscData as JSONObject)[
|
||||
"twoFactorAuthList"
|
||||
] as JSONArray,
|
||||
UserTwoFactorAuth,
|
||||
);
|
||||
setTwoFactorAuthList(twoFactorAuthList);
|
||||
setShowTwoFactorAuth(true);
|
||||
return;
|
||||
}
|
||||
|
||||
LoginUtil.login({
|
||||
user: value,
|
||||
token: miscData ? miscData["token"] : undefined,
|
||||
});
|
||||
}}
|
||||
maxPrimaryButtonWidth={true}
|
||||
footer={
|
||||
<div className="actions text-center mt-4 hover:underline fw-semibold">
|
||||
<div>
|
||||
<Link to={new Route("/accounts/sso")}>
|
||||
<div className="text-indigo-500 hover:text-indigo-900 cursor-pointer text-sm">
|
||||
Use single sign-on (SSO) instead
|
||||
</div>
|
||||
</Link>
|
||||
login(value as User, miscData as JSONObject);
|
||||
}}
|
||||
maxPrimaryButtonWidth={true}
|
||||
footer={
|
||||
<div className="actions text-center mt-4 hover:underline fw-semibold">
|
||||
<div>
|
||||
<Link to={new Route("/accounts/sso")}>
|
||||
<div className="text-indigo-500 hover:text-indigo-900 cursor-pointer text-sm">
|
||||
Use single sign-on (SSO) instead
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
||||
{showTwoFactorAuth && !selectedTwoFactorAuth && (
|
||||
<StaticModelList<UserTwoFactorAuth>
|
||||
titleField="name"
|
||||
descriptionField=""
|
||||
selectedItems={[]}
|
||||
list={twoFactorAuthList}
|
||||
onClick={(item: UserTwoFactorAuth) => {
|
||||
setSelectedTwoFactorAuth(item);
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
||||
{showTwoFactorAuth && selectedTwoFactorAuth && (
|
||||
<BasicForm
|
||||
id="two-factor-auth-form"
|
||||
name="Two Factor Auth"
|
||||
fields={[
|
||||
{
|
||||
field: {
|
||||
code: true,
|
||||
},
|
||||
title: "Code",
|
||||
description: "Enter the code from your authenticator app",
|
||||
required: true,
|
||||
dataTestId: "code",
|
||||
fieldType: FormFieldSchemaType.Text,
|
||||
},
|
||||
]}
|
||||
submitButtonText={"Login"}
|
||||
maxPrimaryButtonWidth={true}
|
||||
isLoading={isTwoFactorAuthLoading}
|
||||
error={twofactorAuthError}
|
||||
onSubmit={async (data: JSONObject) => {
|
||||
setIsTwoFactorAuthLoading(true);
|
||||
|
||||
try {
|
||||
const code: string = data["code"] as string;
|
||||
const twoFactorAuthId: string =
|
||||
selectedTwoFactorAuth.id?.toString() as string;
|
||||
|
||||
const result: HTTPErrorResponse | HTTPResponse<JSONObject> =
|
||||
await API.post(VERIFY_TWO_FACTOR_AUTH_API_URL, {
|
||||
data: {
|
||||
...initialValues,
|
||||
code: code,
|
||||
twoFactorAuthId: twoFactorAuthId,
|
||||
},
|
||||
});
|
||||
|
||||
if (result instanceof HTTPErrorResponse) {
|
||||
throw result;
|
||||
}
|
||||
|
||||
const user: User = User.fromJSON(
|
||||
result["data"] as JSONObject,
|
||||
User,
|
||||
) as User;
|
||||
const miscData: JSONObject = (result["data"] as JSONObject)[
|
||||
"miscData"
|
||||
] as JSONObject;
|
||||
|
||||
login(user as User, miscData as JSONObject);
|
||||
} catch (error) {
|
||||
setTwoFactorAuthError(
|
||||
API.getFriendlyErrorMessage(error as Error),
|
||||
);
|
||||
}
|
||||
|
||||
setIsTwoFactorAuthLoading(false);
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
<div className="mt-10 text-center">
|
||||
<div className="text-muted mb-0 text-gray-500">
|
||||
Don't have an account?{" "}
|
||||
<Link
|
||||
to={new Route("/accounts/register")}
|
||||
className="text-indigo-500 hover:text-indigo-900 cursor-pointer"
|
||||
>
|
||||
Register.
|
||||
</Link>
|
||||
</div>
|
||||
{!selectedTwoFactorAuth && (
|
||||
<div className="text-muted mb-0 text-gray-500">
|
||||
Don't have an account?{" "}
|
||||
<Link
|
||||
to={new Route("/accounts/register")}
|
||||
className="text-indigo-500 hover:text-indigo-900 cursor-pointer"
|
||||
>
|
||||
Register.
|
||||
</Link>
|
||||
</div>
|
||||
)}
|
||||
{selectedTwoFactorAuth ? (
|
||||
<div className="text-muted mb-0 text-gray-500">
|
||||
<Link
|
||||
onClick={() => {
|
||||
setSelectedTwoFactorAuth(undefined);
|
||||
}}
|
||||
className="text-indigo-500 hover:text-indigo-900 cursor-pointer"
|
||||
>
|
||||
Select a different two factor authentication method
|
||||
</Link>
|
||||
</div>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,22 +2,22 @@ import { SERVICE_PROVIDER_LOGIN_URL } from "../Utils/ApiPaths";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import URL from "Common/Types/API/URL";
|
||||
import { JSONArray, JSONObject } from "Common/Types/JSON";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "CommonUI/src/Components/Link/Link";
|
||||
import { DASHBOARD_URL, IDENTITY_URL } from "CommonUI/src/Config";
|
||||
import OneUptimeLogo from "CommonUI/src/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import UserUtil from "CommonUI/src/Utils/User";
|
||||
import User from "Model/Models/User";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "Common/UI/Components/Link/Link";
|
||||
import { DASHBOARD_URL, IDENTITY_URL } from "Common/UI/Config";
|
||||
import OneUptimeLogo from "Common/UI/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import UserUtil from "Common/UI/Utils/User";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import React, { ReactElement, useState } from "react";
|
||||
import ProjectSSO from "Model/Models/ProjectSso";
|
||||
import PageLoader from "CommonUI/src/Components/Loader/PageLoader";
|
||||
import API from "CommonUI/src/Utils/API/API";
|
||||
import BasicForm from "CommonUI/src/Components/Forms/BasicForm";
|
||||
import ProjectSSO from "Common/Models/DatabaseModels/ProjectSso";
|
||||
import PageLoader from "Common/UI/Components/Loader/PageLoader";
|
||||
import API from "Common/UI/Utils/API/API";
|
||||
import BasicForm from "Common/UI/Components/Forms/BasicForm";
|
||||
import Email from "Common/Types/Email";
|
||||
import HTTPErrorResponse from "Common/Types/API/HTTPErrorResponse";
|
||||
import HTTPResponse from "Common/Types/API/HTTPResponse";
|
||||
import StaticModelList from "CommonUI/src/Components/ModelList/StaticModelList";
|
||||
import StaticModelList from "Common/UI/Components/ModelList/StaticModelList";
|
||||
|
||||
const LoginPage: () => JSX.Element = () => {
|
||||
const apiUrl: URL = SERVICE_PROVIDER_LOGIN_URL;
|
||||
|
||||
@@ -3,23 +3,23 @@ import Route from "Common/Types/API/Route";
|
||||
import URL from "Common/Types/API/URL";
|
||||
import Dictionary from "Common/Types/Dictionary";
|
||||
import { JSONObject } from "Common/Types/JSON";
|
||||
import ErrorMessage from "CommonUI/src/Components/ErrorMessage/ErrorMessage";
|
||||
import ModelForm, { FormType } from "CommonUI/src/Components/Forms/ModelForm";
|
||||
import Fields from "CommonUI/src/Components/Forms/Types/Fields";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "CommonUI/src/Components/Link/Link";
|
||||
import PageLoader from "CommonUI/src/Components/Loader/PageLoader";
|
||||
import { BILLING_ENABLED, DASHBOARD_URL } from "CommonUI/src/Config";
|
||||
import OneUptimeLogo from "CommonUI/src/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import BaseAPI from "CommonUI/src/Utils/API/API";
|
||||
import UiAnalytics from "CommonUI/src/Utils/Analytics";
|
||||
import LocalStorage from "CommonUI/src/Utils/LocalStorage";
|
||||
import LoginUtil from "CommonUI/src/Utils/Login";
|
||||
import ModelAPI, { ListResult } from "CommonUI/src/Utils/ModelAPI/ModelAPI";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import UserUtil from "CommonUI/src/Utils/User";
|
||||
import Reseller from "Model/Models/Reseller";
|
||||
import User from "Model/Models/User";
|
||||
import ErrorMessage from "Common/UI/Components/ErrorMessage/ErrorMessage";
|
||||
import ModelForm, { FormType } from "Common/UI/Components/Forms/ModelForm";
|
||||
import Fields from "Common/UI/Components/Forms/Types/Fields";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "Common/UI/Components/Link/Link";
|
||||
import PageLoader from "Common/UI/Components/Loader/PageLoader";
|
||||
import { BILLING_ENABLED, DASHBOARD_URL } from "Common/UI/Config";
|
||||
import OneUptimeLogo from "Common/UI/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import BaseAPI from "Common/UI/Utils/API/API";
|
||||
import UiAnalytics from "Common/UI/Utils/Analytics";
|
||||
import LocalStorage from "Common/UI/Utils/LocalStorage";
|
||||
import LoginUtil from "Common/UI/Utils/Login";
|
||||
import ModelAPI, { ListResult } from "Common/UI/Utils/ModelAPI/ModelAPI";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import UserUtil from "Common/UI/Utils/User";
|
||||
import Reseller from "Common/Models/DatabaseModels/Reseller";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import React, { useState } from "react";
|
||||
import useAsyncEffect from "use-async-effect";
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { RESET_PASSWORD_API_URL } from "../Utils/ApiPaths";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import URL from "Common/Types/API/URL";
|
||||
import ModelForm, { FormType } from "CommonUI/src/Components/Forms/ModelForm";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "CommonUI/src/Components/Link/Link";
|
||||
import OneUptimeLogo from "CommonUI/src/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import User from "Model/Models/User";
|
||||
import ModelForm, { FormType } from "Common/UI/Components/Forms/ModelForm";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import Link from "Common/UI/Components/Link/Link";
|
||||
import OneUptimeLogo from "Common/UI/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import React, { useState } from "react";
|
||||
|
||||
const RegisterPage: () => JSX.Element = () => {
|
||||
|
||||
@@ -3,14 +3,14 @@ import Route from "Common/Types/API/Route";
|
||||
import URL from "Common/Types/API/URL";
|
||||
import { PromiseVoidFunction } from "Common/Types/FunctionTypes";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import { FormType } from "CommonUI/src/Components/Forms/ModelForm";
|
||||
import Link from "CommonUI/src/Components/Link/Link";
|
||||
import PageLoader from "CommonUI/src/Components/Loader/PageLoader";
|
||||
import OneUptimeLogo from "CommonUI/src/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import API from "CommonUI/src/Utils/API/API";
|
||||
import ModelAPI from "CommonUI/src/Utils/ModelAPI/ModelAPI";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import EmailVerificationToken from "Model/Models/EmailVerificationToken";
|
||||
import { FormType } from "Common/UI/Components/Forms/ModelForm";
|
||||
import Link from "Common/UI/Components/Link/Link";
|
||||
import PageLoader from "Common/UI/Components/Loader/PageLoader";
|
||||
import OneUptimeLogo from "Common/UI/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import API from "Common/UI/Utils/API/API";
|
||||
import ModelAPI from "Common/UI/Utils/ModelAPI/ModelAPI";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import EmailVerificationToken from "Common/Models/DatabaseModels/EmailVerificationToken";
|
||||
import React, { useEffect, useState } from "react";
|
||||
|
||||
const VerifyEmail: () => JSX.Element = () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import Route from "Common/Types/API/Route";
|
||||
import URL from "Common/Types/API/URL";
|
||||
import { IDENTITY_URL } from "CommonUI/src/Config";
|
||||
import { IDENTITY_URL } from "Common/UI/Config";
|
||||
|
||||
export const SIGNUP_API_URL: URL = URL.fromURL(IDENTITY_URL).addRoute(
|
||||
new Route("/signup"),
|
||||
@@ -9,6 +9,10 @@ export const LOGIN_API_URL: URL = URL.fromURL(IDENTITY_URL).addRoute(
|
||||
new Route("/login"),
|
||||
);
|
||||
|
||||
export const VERIFY_TWO_FACTOR_AUTH_API_URL: URL = URL.fromURL(
|
||||
IDENTITY_URL,
|
||||
).addRoute(new Route("/verify-two-factor-auth"));
|
||||
|
||||
export const SERVICE_PROVIDER_LOGIN_URL: URL = URL.fromURL(
|
||||
IDENTITY_URL,
|
||||
).addRoute(new Route("/service-provider-login"));
|
||||
|
||||
@@ -35,33 +35,17 @@ RUN npm install
|
||||
COPY ./Common /usr/src/Common
|
||||
|
||||
|
||||
WORKDIR /usr/src/Model
|
||||
COPY ./Model/package*.json /usr/src/Model/
|
||||
# Set version in ./Model/package.json to the APP_VERSION
|
||||
RUN sed -i "s/\"version\": \".*\"/\"version\": \"$APP_VERSION\"/g" /usr/src/Model/package.json
|
||||
RUN npm install
|
||||
COPY ./Model /usr/src/Model
|
||||
|
||||
|
||||
|
||||
WORKDIR /usr/src/CommonServer
|
||||
COPY ./CommonServer/package*.json /usr/src/CommonServer/
|
||||
# Set version in ./CommonServer/package.json to the APP_VERSION
|
||||
RUN sed -i "s/\"version\": \".*\"/\"version\": \"$APP_VERSION\"/g" /usr/src/CommonServer/package.json
|
||||
RUN npm install
|
||||
COPY ./CommonServer /usr/src/CommonServer
|
||||
|
||||
|
||||
|
||||
|
||||
# Install CommonUI
|
||||
|
||||
WORKDIR /usr/src/CommonUI
|
||||
COPY ./CommonUI/package*.json /usr/src/CommonUI/
|
||||
# Set version in ./CommonUI/package.json to the APP_VERSION
|
||||
RUN sed -i "s/\"version\": \".*\"/\"version\": \"$APP_VERSION\"/g" /usr/src/CommonUI/package.json
|
||||
RUN npm install --force
|
||||
COPY ./CommonUI /usr/src/CommonUI
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { PromiseVoidFunction } from "Common/Types/FunctionTypes";
|
||||
import Express, { ExpressApplication } from "CommonServer/Utils/Express";
|
||||
import logger from "CommonServer/Utils/Logger";
|
||||
import App from "CommonServer/Utils/StartServer";
|
||||
import Express, { ExpressApplication } from "Common/Server/Utils/Express";
|
||||
import logger from "Common/Server/Utils/Logger";
|
||||
import App from "Common/Server/Utils/StartServer";
|
||||
|
||||
export const APP_NAME: string = "admin";
|
||||
|
||||
|
||||
116
AdminDashboard/package-lock.json
generated
116
AdminDashboard/package-lock.json
generated
@@ -9,11 +9,9 @@
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"Common": "file:../Common",
|
||||
"CommonServer": "file:../CommonServer",
|
||||
"CommonUI": "file:../CommonUI",
|
||||
|
||||
"dotenv": "^16.4.5",
|
||||
"file-loader": "^6.2.0",
|
||||
"Model": "file:../Model",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-router-dom": "^6.23.1",
|
||||
@@ -39,25 +37,81 @@
|
||||
"version": "1.0.0",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.24.6",
|
||||
"@monaco-editor/react": "^4.4.6",
|
||||
"@nivo/core": "^0.87.0",
|
||||
"@nivo/line": "^0.87.0",
|
||||
"@opentelemetry/api": "^1.9.0",
|
||||
"@opentelemetry/context-zone": "^1.25.0",
|
||||
"@opentelemetry/exporter-trace-otlp-http": "^0.52.0",
|
||||
"@opentelemetry/instrumentation": "^0.52.0",
|
||||
"@opentelemetry/instrumentation-fetch": "^0.52.1",
|
||||
"@opentelemetry/instrumentation-xml-http-request": "^0.52.1",
|
||||
"@opentelemetry/resources": "^1.25.0",
|
||||
"@opentelemetry/sdk-trace-web": "^1.23.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.25.0",
|
||||
"@tippyjs/react": "^4.2.6",
|
||||
"@types/crypto-js": "^4.2.2",
|
||||
"@types/qrcode": "^1.5.5",
|
||||
"@types/react-highlight": "^0.12.8",
|
||||
"@types/react-syntax-highlighter": "^15.5.13",
|
||||
"@types/uuid": "^8.3.4",
|
||||
"axios": "^1.6.8",
|
||||
"axios": "^1.7.2",
|
||||
"Common": "file:../Common",
|
||||
"crypto-js": "^4.1.1",
|
||||
"formik": "^2.4.6",
|
||||
"history": "^5.3.0",
|
||||
"json5": "^2.2.3",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.30.1",
|
||||
"moment-timezone": "^0.5.45",
|
||||
"posthog-js": "^1.130.1",
|
||||
"posthog-js": "^1.139.6",
|
||||
"prop-types": "^15.8.1",
|
||||
"qrcode": "^1.5.3",
|
||||
"react": "^18.3.1",
|
||||
"react-beautiful-dnd": "^13.1.1",
|
||||
"react-big-calendar": "^1.13.0",
|
||||
"react-color": "^2.19.3",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-dropzone": "^14.2.2",
|
||||
"react-error-boundary": "^4.0.13",
|
||||
"react-highlight": "^0.15.0",
|
||||
"react-markdown": "^8.0.3",
|
||||
"react-router-dom": "^6.24.1",
|
||||
"react-select": "^5.4.0",
|
||||
"react-spinners": "^0.14.1",
|
||||
"react-syntax-highlighter": "^15.5.0",
|
||||
"react-toggle": "^4.1.3",
|
||||
"reactflow": "^11.11.4",
|
||||
"reflect-metadata": "^0.2.2",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"slugify": "^1.6.5",
|
||||
"socket.io-client": "^4.7.5",
|
||||
"tippy.js": "^6.3.7",
|
||||
"typeorm": "^0.3.20",
|
||||
"universal-cookie": "^4.0.4",
|
||||
"use-async-effect": "^2.2.6",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@faker-js/faker": "^8.0.2",
|
||||
"@types/jest": "^27.5.2",
|
||||
"@types/node": "^17.0.22",
|
||||
"jest": "^27.5.1",
|
||||
"ts-jest": "^27.1.4"
|
||||
"@testing-library/jest-dom": "^5.16.5",
|
||||
"@testing-library/react": "^13.3.0",
|
||||
"@testing-library/user-event": "^14.4.3",
|
||||
"@types/jest": "^28.1.4",
|
||||
"@types/lodash": "^4.14.202",
|
||||
"@types/node": "^17.0.45",
|
||||
"@types/react": "^18.2.38",
|
||||
"@types/react-beautiful-dnd": "^13.1.2",
|
||||
"@types/react-big-calendar": "^1.8.5",
|
||||
"@types/react-color": "^3.0.6",
|
||||
"@types/react-test-renderer": "^18.0.0",
|
||||
"@types/react-toggle": "^4.0.3",
|
||||
"jest": "^28.1.1",
|
||||
"jest-environment-jsdom": "^29.7.0",
|
||||
"react-test-renderer": "^18.2.0",
|
||||
"ts-jest": "^28.0.5"
|
||||
}
|
||||
},
|
||||
"../CommonServer": {
|
||||
@@ -78,6 +132,7 @@
|
||||
"@opentelemetry/sdk-metrics": "^1.21.0",
|
||||
"@opentelemetry/sdk-node": "^0.48.0",
|
||||
"@opentelemetry/sdk-trace-node": "^1.21.0",
|
||||
"@types/crypto-js": "^4.2.2",
|
||||
"acme-client": "^5.3.0",
|
||||
"airtable": "^0.12.2",
|
||||
"bullmq": "^5.3.3",
|
||||
@@ -85,6 +140,7 @@
|
||||
"cookie-parser": "^1.4.6",
|
||||
"cors": "^2.8.5",
|
||||
"cron-parser": "^4.8.1",
|
||||
"crypto-js": "^4.2.0",
|
||||
"dotenv": "^16.4.4",
|
||||
"ejs": "^3.1.10",
|
||||
"express": "^4.19.2",
|
||||
@@ -92,9 +148,9 @@
|
||||
"json2csv": "^5.0.7",
|
||||
"jsonwebtoken": "^9.0.0",
|
||||
"marked": "^12.0.2",
|
||||
"Model": "file:../Model",
|
||||
"node-cron": "^3.0.3",
|
||||
"nodemailer": "^6.9.10",
|
||||
"otpauth": "^9.3.1",
|
||||
"pg": "^8.7.3",
|
||||
"redis-semaphore": "^5.5.1",
|
||||
"socket.io": "^4.7.4",
|
||||
@@ -123,42 +179,47 @@
|
||||
"../CommonUI": {
|
||||
"name": "@oneuptime/common-ui",
|
||||
"version": "1.0.0",
|
||||
"extraneous": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.24.1",
|
||||
"@babel/runtime": "^7.24.6",
|
||||
"@monaco-editor/react": "^4.4.6",
|
||||
"@nivo/core": "^0.86.0",
|
||||
"@nivo/line": "^0.86.0",
|
||||
"@opentelemetry/api": "^1.8.0",
|
||||
"@opentelemetry/context-zone": "^1.23.0",
|
||||
"@opentelemetry/exporter-trace-otlp-http": "^0.51.0",
|
||||
"@opentelemetry/instrumentation": "^0.51.0",
|
||||
"@opentelemetry/instrumentation-fetch": "^0.51.0",
|
||||
"@opentelemetry/instrumentation-xml-http-request": "^0.51.0",
|
||||
"@opentelemetry/resources": "^1.23.0",
|
||||
"@nivo/core": "^0.87.0",
|
||||
"@nivo/line": "^0.87.0",
|
||||
"@opentelemetry/api": "^1.9.0",
|
||||
"@opentelemetry/context-zone": "^1.25.0",
|
||||
"@opentelemetry/exporter-trace-otlp-http": "^0.52.0",
|
||||
"@opentelemetry/instrumentation": "^0.52.0",
|
||||
"@opentelemetry/instrumentation-fetch": "^0.52.0",
|
||||
"@opentelemetry/instrumentation-xml-http-request": "^0.52.1",
|
||||
"@opentelemetry/resources": "^1.25.0",
|
||||
"@opentelemetry/sdk-trace-web": "^1.23.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.23.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.25.0",
|
||||
"@tippyjs/react": "^4.2.6",
|
||||
"@types/react-highlight": "^0.12.8",
|
||||
"@types/react-syntax-highlighter": "^15.5.13",
|
||||
"Common": "file:../Common",
|
||||
"CommonProject": "file:../CommonProject",
|
||||
"formik": "^2.4.6",
|
||||
"history": "^5.3.0",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"Model": "file:../Model",
|
||||
"moment-timezone": "^0.5.45",
|
||||
"prop-types": "^15.8.1",
|
||||
"react": "^18.3.1",
|
||||
"react-beautiful-dnd": "^13.1.1",
|
||||
"react-big-calendar": "^1.11.2",
|
||||
"react-big-calendar": "^1.13.0",
|
||||
"react-color": "^2.19.3",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-dropzone": "^14.2.2",
|
||||
"react-error-boundary": "^4.0.13",
|
||||
"react-highlight": "^0.15.0",
|
||||
"react-markdown": "^8.0.3",
|
||||
"react-router-dom": "^6.22.3",
|
||||
"react-router-dom": "^6.23.1",
|
||||
"react-select": "^5.4.0",
|
||||
"react-spinners": "^0.13.6",
|
||||
"react-syntax-highlighter": "^15.5.0",
|
||||
"react-toggle": "^4.1.3",
|
||||
"reactflow": "^11.11.1",
|
||||
"remark-gfm": "^3.0.1",
|
||||
@@ -190,6 +251,7 @@
|
||||
"../Model": {
|
||||
"name": "@oneuptime/model",
|
||||
"version": "1.0.0",
|
||||
"extraneous": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"Common": "file:../Common",
|
||||
@@ -6874,10 +6936,6 @@
|
||||
"resolved": "../CommonServer",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/CommonUI": {
|
||||
"resolved": "../CommonUI",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/compressible": {
|
||||
"version": "2.0.18",
|
||||
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
|
||||
@@ -14250,10 +14308,6 @@
|
||||
"mkdirp": "bin/cmd.js"
|
||||
}
|
||||
},
|
||||
"node_modules/Model": {
|
||||
"resolved": "../Model",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
|
||||
@@ -4,11 +4,9 @@
|
||||
"private": false,
|
||||
"dependencies": {
|
||||
"Common": "file:../Common",
|
||||
"CommonServer": "file:../CommonServer",
|
||||
"CommonUI": "file:../CommonUI",
|
||||
|
||||
"dotenv": "^16.4.5",
|
||||
"file-loader": "^6.2.0",
|
||||
"Model": "file:../Model",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-router-dom": "^6.23.1",
|
||||
|
||||
@@ -12,9 +12,9 @@ import Users from "./Pages/Users/Index";
|
||||
import PageMap from "./Utils/PageMap";
|
||||
import RouteMap from "./Utils/RouteMap";
|
||||
import URL from "Common/Types/API/URL";
|
||||
import { ACCOUNTS_URL, DASHBOARD_URL } from "CommonUI/src/Config";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import User from "CommonUI/src/Utils/User";
|
||||
import { ACCOUNTS_URL, DASHBOARD_URL } from "Common/UI/Config";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import User from "Common/UI/Utils/User";
|
||||
import React from "react";
|
||||
import {
|
||||
Route as PageRoute,
|
||||
@@ -23,6 +23,10 @@ import {
|
||||
useNavigate,
|
||||
useParams,
|
||||
} from "react-router-dom";
|
||||
import UserView from "./Pages/Users/View/Index";
|
||||
import UserDelete from "./Pages/Users/View/Delete";
|
||||
import ProjectView from "./Pages/Projects/View/Index";
|
||||
import ProjectDelete from "./Pages/Projects/View/Delete";
|
||||
|
||||
const App: () => JSX.Element = () => {
|
||||
Navigation.setNavigateHook(useNavigate());
|
||||
@@ -61,6 +65,26 @@ const App: () => JSX.Element = () => {
|
||||
element={<Users />}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.USER_VIEW]?.toString() || ""}
|
||||
element={<UserView />}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.USER_DELETE]?.toString() || ""}
|
||||
element={<UserDelete />}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.PROJECT_VIEW]?.toString() || ""}
|
||||
element={<ProjectView />}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.PROJECT_DELETE]?.toString() || ""}
|
||||
element={<ProjectDelete />}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.LOGOUT]?.toString() || ""}
|
||||
element={<Logout />}
|
||||
|
||||
@@ -5,9 +5,9 @@ import BadDataException from "Common/Types/Exception/BadDataException";
|
||||
import { PromiseVoidFunction } from "Common/Types/FunctionTypes";
|
||||
import { JSONObject } from "Common/Types/JSON";
|
||||
import API from "Common/Utils/API";
|
||||
import Footer from "CommonUI/src/Components/Footer/Footer";
|
||||
import ConfirmModal from "CommonUI/src/Components/Modal/ConfirmModal";
|
||||
import { HOST, HTTP_PROTOCOL } from "CommonUI/src/Config";
|
||||
import Footer from "Common/UI/Components/Footer/Footer";
|
||||
import ConfirmModal from "Common/UI/Components/Modal/ConfirmModal";
|
||||
import { HOST, HTTP_PROTOCOL } from "Common/UI/Config";
|
||||
import React from "react";
|
||||
|
||||
const DashboardFooter: () => JSX.Element = () => {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import Help from "./Help";
|
||||
import Logo from "./Logo";
|
||||
import UserProfile from "./UserProfile";
|
||||
import Button, { ButtonStyleType } from "CommonUI/src/Components/Button/Button";
|
||||
import Header from "CommonUI/src/Components/Header/Header";
|
||||
import { DASHBOARD_URL } from "CommonUI/src/Config";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import Button, { ButtonStyleType } from "Common/UI/Components/Button/Button";
|
||||
import Header from "Common/UI/Components/Header/Header";
|
||||
import { DASHBOARD_URL } from "Common/UI/Config";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
const DashboardHeader: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import URL from "Common/Types/API/URL";
|
||||
import IconProp from "Common/Types/Icon/IconProp";
|
||||
import HeaderIconDropdownButton from "CommonUI/src/Components/Header/HeaderIconDropdownButton";
|
||||
import IconDropdownItem from "CommonUI/src/Components/Header/IconDropdown/IconDropdownItem";
|
||||
import IconDropdownMenu from "CommonUI/src/Components/Header/IconDropdown/IconDropdownMenu";
|
||||
import IconDropdownRow from "CommonUI/src/Components/Header/IconDropdown/IconDropdownRow";
|
||||
import HeaderIconDropdownButton from "Common/UI/Components/Header/HeaderIconDropdownButton";
|
||||
import IconDropdownItem from "Common/UI/Components/Header/IconDropdown/IconDropdownItem";
|
||||
import IconDropdownMenu from "Common/UI/Components/Header/IconDropdown/IconDropdownMenu";
|
||||
import IconDropdownRow from "Common/UI/Components/Header/IconDropdown/IconDropdownRow";
|
||||
import React, { ReactElement, useState } from "react";
|
||||
|
||||
const Help: () => JSX.Element = (): ReactElement => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Tailwind
|
||||
import Route from "Common/Types/API/Route";
|
||||
import Image from "CommonUI/src/Components/Image/Image";
|
||||
import OneUptimeLogo from "CommonUI/src/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import Image from "Common/UI/Components/Image/Image";
|
||||
import OneUptimeLogo from "Common/UI/Images/logos/OneUptimeSVG/3-transparent.svg";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
export interface ComponentProps {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import IconProp from "Common/Types/Icon/IconProp";
|
||||
import HeaderIconDropdownButton from "CommonUI/src/Components/Header/HeaderIconDropdownButton";
|
||||
import NotificationItem from "CommonUI/src/Components/Header/Notifications/NotificationItem";
|
||||
import Notifications from "CommonUI/src/Components/Header/Notifications/Notifications";
|
||||
import HeaderIconDropdownButton from "Common/UI/Components/Header/HeaderIconDropdownButton";
|
||||
import NotificationItem from "Common/UI/Components/Header/Notifications/NotificationItem";
|
||||
import Notifications from "Common/UI/Components/Header/Notifications/Notifications";
|
||||
import React, { ReactElement, useState } from "react";
|
||||
|
||||
const DashboardHeader: () => JSX.Element = (): ReactElement => {
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import SubscriptionPlan from "Common/Types/Billing/SubscriptionPlan";
|
||||
import IconProp from "Common/Types/Icon/IconProp";
|
||||
import { FormType } from "CommonUI/src/Components/Forms/ModelForm";
|
||||
import Field from "CommonUI/src/Components/Forms/Types/Field";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import ProjectPicker from "CommonUI/src/Components/Header/ProjectPicker/ProjectPicker";
|
||||
import ModelFormModal from "CommonUI/src/Components/ModelFormModal/ModelFormModal";
|
||||
import { RadioButton } from "CommonUI/src/Components/RadioButtons/GroupRadioButtons";
|
||||
import Toggle from "CommonUI/src/Components/Toggle/Toggle";
|
||||
import { BILLING_ENABLED, getAllEnvVars } from "CommonUI/src/Config";
|
||||
import { GetReactElementFunction } from "CommonUI/src/Types/FunctionTypes";
|
||||
import ProjectUtil from "CommonUI/src/Utils/Project";
|
||||
import Project from "Model/Models/Project";
|
||||
import { FormType } from "Common/UI/Components/Forms/ModelForm";
|
||||
import Field from "Common/UI/Components/Forms/Types/Field";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import ProjectPicker from "Common/UI/Components/Header/ProjectPicker/ProjectPicker";
|
||||
import ModelFormModal from "Common/UI/Components/ModelFormModal/ModelFormModal";
|
||||
import { RadioButton } from "Common/UI/Components/RadioButtons/GroupRadioButtons";
|
||||
import Toggle from "Common/UI/Components/Toggle/Toggle";
|
||||
import { BILLING_ENABLED, getAllEnvVars } from "Common/UI/Config";
|
||||
import { GetReactElementFunction } from "Common/UI/Types/FunctionTypes";
|
||||
import ProjectUtil from "Common/UI/Utils/Project";
|
||||
import Project from "Common/Models/DatabaseModels/Project";
|
||||
import React, {
|
||||
FunctionComponent,
|
||||
ReactElement,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import SearchBox from "CommonUI/src/Components/Header/SearchBox";
|
||||
import Project from "Model/Models/Project";
|
||||
import SearchBox from "Common/UI/Components/Header/SearchBox";
|
||||
import Project from "Common/Models/DatabaseModels/Project";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
export interface ComponentProps {
|
||||
|
||||
@@ -2,13 +2,13 @@ import PageMap from "../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import IconProp from "Common/Types/Icon/IconProp";
|
||||
import HeaderIconDropdownButton from "CommonUI/src/Components/Header/HeaderIconDropdownButton";
|
||||
import IconDropdownItem from "CommonUI/src/Components/Header/IconDropdown/IconDropdownItem";
|
||||
import IconDropdownMenu from "CommonUI/src/Components/Header/IconDropdown/IconDropdownMenu";
|
||||
import { DASHBOARD_URL } from "CommonUI/src/Config";
|
||||
import BlankProfilePic from "CommonUI/src/Images/users/blank-profile.svg";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import User from "CommonUI/src/Utils/User";
|
||||
import HeaderIconDropdownButton from "Common/UI/Components/Header/HeaderIconDropdownButton";
|
||||
import IconDropdownItem from "Common/UI/Components/Header/IconDropdown/IconDropdownItem";
|
||||
import IconDropdownMenu from "Common/UI/Components/Header/IconDropdown/IconDropdownMenu";
|
||||
import { DASHBOARD_URL } from "Common/UI/Config";
|
||||
import BlankProfilePic from "Common/UI/Images/users/blank-profile.svg";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import User from "Common/UI/Utils/User";
|
||||
import React, { FunctionComponent, ReactElement, useState } from "react";
|
||||
|
||||
const DashboardUserProfile: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import Footer from "../Footer/Footer";
|
||||
import Header from "../Header/Header";
|
||||
import NavBar from "../NavBar/NavBar";
|
||||
import MasterPage from "CommonUI/src/Components/MasterPage/MasterPage";
|
||||
import TopAlert from "CommonUI/src/Components/TopAlert/TopAlert";
|
||||
import MasterPage from "Common/UI/Components/MasterPage/MasterPage";
|
||||
import TopAlert from "Common/UI/Components/TopAlert/TopAlert";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
export interface ComponentProps {
|
||||
|
||||
@@ -2,8 +2,8 @@ import PageMap from "../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import IconProp from "Common/Types/Icon/IconProp";
|
||||
import NavBar from "CommonUI/src/Components/Navbar/NavBar";
|
||||
import NavBarItem from "CommonUI/src/Components/Navbar/NavBarItem";
|
||||
import NavBar from "Common/UI/Components/Navbar/NavBar";
|
||||
import NavBarItem from "Common/UI/Components/Navbar/NavBarItem";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
const DashboardNavbar: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import App from "./App";
|
||||
import Telemetry from "CommonUI/src/Utils/Telemetry";
|
||||
import Telemetry from "Common/UI/Utils/Telemetry";
|
||||
import React from "react";
|
||||
import ReactDOM from "react-dom/client";
|
||||
import { BrowserRouter } from "react-router-dom";
|
||||
|
||||
Telemetry.init({
|
||||
serviceName: "AdminDashboard",
|
||||
serviceName: "admin-dashboard",
|
||||
});
|
||||
|
||||
const root: any = ReactDOM.createRoot(
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import PageMap from "../../Utils/PageMap";
|
||||
import RouteMap from "../../Utils/RouteMap";
|
||||
import PageLoader from "CommonUI/src/Components/Loader/PageLoader";
|
||||
import Page from "CommonUI/src/Components/Page/Page";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import PageLoader from "Common/UI/Components/Loader/PageLoader";
|
||||
import Page from "Common/UI/Components/Page/Page";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import React, { FunctionComponent, ReactElement, useEffect } from "react";
|
||||
|
||||
const Init: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -2,13 +2,13 @@ import PageMap from "../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import { PromiseVoidFunction } from "Common/Types/FunctionTypes";
|
||||
import ErrorMessage from "CommonUI/src/Components/ErrorMessage/ErrorMessage";
|
||||
import PageLoader from "CommonUI/src/Components/Loader/PageLoader";
|
||||
import Page from "CommonUI/src/Components/Page/Page";
|
||||
import { ACCOUNTS_URL } from "CommonUI/src/Config";
|
||||
import UiAnalytics from "CommonUI/src/Utils/Analytics";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import UserUtil from "CommonUI/src/Utils/User";
|
||||
import ErrorMessage from "Common/UI/Components/ErrorMessage/ErrorMessage";
|
||||
import PageLoader from "Common/UI/Components/Loader/PageLoader";
|
||||
import Page from "Common/UI/Components/Page/Page";
|
||||
import { ACCOUNTS_URL } from "Common/UI/Config";
|
||||
import UiAnalytics from "Common/UI/Utils/Analytics";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import UserUtil from "Common/UI/Utils/User";
|
||||
import React, { FunctionComponent, ReactElement, useEffect } from "react";
|
||||
|
||||
const Logout: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -3,18 +3,18 @@ import PageMap from "../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import SubscriptionPlan from "Common/Types/Billing/SubscriptionPlan";
|
||||
import Field from "CommonUI/src/Components/Forms/Types/Field";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import ModelTable from "CommonUI/src/Components/ModelTable/ModelTable";
|
||||
import Page from "CommonUI/src/Components/Page/Page";
|
||||
import { RadioButton } from "CommonUI/src/Components/RadioButtons/GroupRadioButtons";
|
||||
import Toggle from "CommonUI/src/Components/Toggle/Toggle";
|
||||
import FieldType from "CommonUI/src/Components/Types/FieldType";
|
||||
import { BILLING_ENABLED, getAllEnvVars } from "CommonUI/src/Config";
|
||||
import { GetReactElementFunction } from "CommonUI/src/Types/FunctionTypes";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import Project from "Model/Models/Project";
|
||||
import User from "Model/Models/User";
|
||||
import Field from "Common/UI/Components/Forms/Types/Field";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import ModelTable from "Common/UI/Components/ModelTable/ModelTable";
|
||||
import Page from "Common/UI/Components/Page/Page";
|
||||
import { RadioButton } from "Common/UI/Components/RadioButtons/GroupRadioButtons";
|
||||
import Toggle from "Common/UI/Components/Toggle/Toggle";
|
||||
import FieldType from "Common/UI/Components/Types/FieldType";
|
||||
import { BILLING_ENABLED, getAllEnvVars } from "Common/UI/Config";
|
||||
import { GetReactElementFunction } from "Common/UI/Types/FunctionTypes";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import Project from "Common/Models/DatabaseModels/Project";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import React, {
|
||||
FunctionComponent,
|
||||
ReactElement,
|
||||
@@ -187,7 +187,7 @@ const Projects: FunctionComponent = (): ReactElement => {
|
||||
isEditable={false}
|
||||
isCreateable={true}
|
||||
name="Projects"
|
||||
isViewable={false}
|
||||
isViewable={true}
|
||||
cardProps={{
|
||||
title: "Projects",
|
||||
description: "Here is a list of proejcts in OneUptime.",
|
||||
|
||||
52
AdminDashboard/src/Pages/Projects/View/Delete.tsx
Normal file
52
AdminDashboard/src/Pages/Projects/View/Delete.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
import PageMap from "../../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import ModelDelete from "Common/UI/Components/ModelDelete/ModelDelete";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
import SideMenuComponent from "./SideMenu";
|
||||
import Project from "Common/Models/DatabaseModels/Project";
|
||||
import ModelPage from "Common/UI/Components/Page/ModelPage";
|
||||
|
||||
const DeletePage: FunctionComponent = (): ReactElement => {
|
||||
const modelId: ObjectID = Navigation.getLastParamAsObjectID(1);
|
||||
|
||||
return (
|
||||
<ModelPage<Project>
|
||||
modelId={modelId}
|
||||
modelNameField="name"
|
||||
modelType={Project}
|
||||
title={"Project"}
|
||||
breadcrumbLinks={[
|
||||
{
|
||||
title: "Admin Dashboard",
|
||||
to: RouteUtil.populateRouteParams(RouteMap[PageMap.HOME] as Route),
|
||||
},
|
||||
{
|
||||
title: "Projects",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.PROJECTS] as Route,
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "Project",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.PROJECT_VIEW] as Route,
|
||||
),
|
||||
},
|
||||
]}
|
||||
sideMenu={<SideMenuComponent modelId={modelId} />}
|
||||
>
|
||||
<ModelDelete
|
||||
modelType={Project}
|
||||
modelId={modelId}
|
||||
onDeleteSuccess={() => {
|
||||
Navigation.navigate(RouteMap[PageMap.PROJECTS] as Route);
|
||||
}}
|
||||
/>
|
||||
</ModelPage>
|
||||
);
|
||||
};
|
||||
|
||||
export default DeletePage;
|
||||
90
AdminDashboard/src/Pages/Projects/View/Index.tsx
Normal file
90
AdminDashboard/src/Pages/Projects/View/Index.tsx
Normal file
@@ -0,0 +1,90 @@
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import PageMap from "../../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import Project from "Common/Models/DatabaseModels/Project";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
import CardModelDetail from "Common/UI/Components/ModelDetail/CardModelDetail";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import FieldType from "Common/UI/Components/Types/FieldType";
|
||||
import ModelPage from "Common/UI/Components/Page/ModelPage";
|
||||
import SideMenuComponent from "./SideMenu";
|
||||
|
||||
const Projects: FunctionComponent = (): ReactElement => {
|
||||
const modelId: ObjectID = Navigation.getLastParamAsObjectID();
|
||||
|
||||
return (
|
||||
<ModelPage
|
||||
modelId={modelId}
|
||||
modelNameField="name"
|
||||
modelType={Project}
|
||||
title={"Project"}
|
||||
breadcrumbLinks={[
|
||||
{
|
||||
title: "Admin Dashboard",
|
||||
to: RouteUtil.populateRouteParams(RouteMap[PageMap.HOME] as Route),
|
||||
},
|
||||
{
|
||||
title: "Projects",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.PROJECTS] as Route,
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "Project",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.PROJECT_VIEW] as Route,
|
||||
),
|
||||
},
|
||||
]}
|
||||
sideMenu={<SideMenuComponent modelId={modelId} />}
|
||||
>
|
||||
<div>
|
||||
<CardModelDetail<Project>
|
||||
name="Project"
|
||||
cardProps={{
|
||||
title: "Project",
|
||||
description: "Project details",
|
||||
}}
|
||||
isEditable={true}
|
||||
editButtonText="Edit Project"
|
||||
formFields={[
|
||||
{
|
||||
field: {
|
||||
name: true,
|
||||
},
|
||||
title: "Name",
|
||||
fieldType: FormFieldSchemaType.Text,
|
||||
required: true,
|
||||
},
|
||||
]}
|
||||
modelDetailProps={{
|
||||
modelType: Project,
|
||||
id: "model-detail-user",
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
_id: true,
|
||||
},
|
||||
title: "Project ID",
|
||||
fieldType: FieldType.Text,
|
||||
placeholder: "-",
|
||||
},
|
||||
{
|
||||
field: {
|
||||
name: true,
|
||||
},
|
||||
title: "Name",
|
||||
fieldType: FieldType.Text,
|
||||
},
|
||||
],
|
||||
modelId: modelId,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</ModelPage>
|
||||
);
|
||||
};
|
||||
|
||||
export default Projects;
|
||||
53
AdminDashboard/src/Pages/Projects/View/SideMenu.tsx
Normal file
53
AdminDashboard/src/Pages/Projects/View/SideMenu.tsx
Normal file
@@ -0,0 +1,53 @@
|
||||
import PageMap from "../../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import IconProp from "Common/Types/Icon/IconProp";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import SideMenu from "Common/UI/Components/SideMenu/SideMenu";
|
||||
import SideMenuItem from "Common/UI/Components/SideMenu/SideMenuItem";
|
||||
import SideMenuSection from "Common/UI/Components/SideMenu/SideMenuSection";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
export interface SideMenuProps {
|
||||
modelId: ObjectID;
|
||||
}
|
||||
|
||||
const SideMenuComponent: FunctionComponent<SideMenuProps> = (
|
||||
props: SideMenuProps,
|
||||
): ReactElement => {
|
||||
return (
|
||||
<SideMenu>
|
||||
<SideMenuSection title="Basic">
|
||||
<SideMenuItem
|
||||
link={{
|
||||
title: "Overview",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.PROJECT_VIEW] as Route,
|
||||
{
|
||||
modelId: props.modelId,
|
||||
},
|
||||
),
|
||||
}}
|
||||
icon={IconProp.Info}
|
||||
/>
|
||||
</SideMenuSection>
|
||||
|
||||
<SideMenuSection title="Advanced">
|
||||
<SideMenuItem
|
||||
link={{
|
||||
title: "Delete",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.PROJECT_DELETE] as Route,
|
||||
{
|
||||
modelId: props.modelId,
|
||||
},
|
||||
),
|
||||
}}
|
||||
icon={IconProp.Trash}
|
||||
/>
|
||||
</SideMenuSection>
|
||||
</SideMenu>
|
||||
);
|
||||
};
|
||||
|
||||
export default SideMenuComponent;
|
||||
@@ -3,11 +3,11 @@ import RouteMap, { RouteUtil } from "../../../Utils/RouteMap";
|
||||
import DashboardSideMenu from "../SideMenu";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import CardModelDetail from "CommonUI/src/Components/ModelDetail/CardModelDetail";
|
||||
import Page from "CommonUI/src/Components/Page/Page";
|
||||
import FieldType from "CommonUI/src/Components/Types/FieldType";
|
||||
import GlobalConfig from "Model/Models/GlobalConfig";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import CardModelDetail from "Common/UI/Components/ModelDetail/CardModelDetail";
|
||||
import Page from "Common/UI/Components/Page/Page";
|
||||
import FieldType from "Common/UI/Components/Types/FieldType";
|
||||
import GlobalConfig from "Common/Models/DatabaseModels/GlobalConfig";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
const Settings: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -3,11 +3,11 @@ import RouteMap, { RouteUtil } from "../../../Utils/RouteMap";
|
||||
import DashboardSideMenu from "../SideMenu";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import CardModelDetail from "CommonUI/src/Components/ModelDetail/CardModelDetail";
|
||||
import Page from "CommonUI/src/Components/Page/Page";
|
||||
import FieldType from "CommonUI/src/Components/Types/FieldType";
|
||||
import GlobalConfig from "Model/Models/GlobalConfig";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import CardModelDetail from "Common/UI/Components/ModelDetail/CardModelDetail";
|
||||
import Page from "Common/UI/Components/Page/Page";
|
||||
import FieldType from "Common/UI/Components/Types/FieldType";
|
||||
import GlobalConfig from "Common/Models/DatabaseModels/GlobalConfig";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
const Settings: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -3,11 +3,11 @@ import RouteMap, { RouteUtil } from "../../../Utils/RouteMap";
|
||||
import DashboardSideMenu from "../SideMenu";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import CardModelDetail from "CommonUI/src/Components/ModelDetail/CardModelDetail";
|
||||
import Page from "CommonUI/src/Components/Page/Page";
|
||||
import FieldType from "CommonUI/src/Components/Types/FieldType";
|
||||
import GlobalConfig from "Model/Models/GlobalConfig";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import CardModelDetail from "Common/UI/Components/ModelDetail/CardModelDetail";
|
||||
import Page from "Common/UI/Components/Page/Page";
|
||||
import FieldType from "Common/UI/Components/Types/FieldType";
|
||||
import GlobalConfig from "Common/Models/DatabaseModels/GlobalConfig";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
const Settings: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -5,16 +5,18 @@ import Route from "Common/Types/API/Route";
|
||||
import { Green, Red } from "Common/Types/BrandColors";
|
||||
import { PromiseVoidFunction } from "Common/Types/FunctionTypes";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import ErrorMessage from "CommonUI/src/Components/ErrorMessage/ErrorMessage";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import PageLoader from "CommonUI/src/Components/Loader/PageLoader";
|
||||
import CardModelDetail from "CommonUI/src/Components/ModelDetail/CardModelDetail";
|
||||
import Page from "CommonUI/src/Components/Page/Page";
|
||||
import Pill from "CommonUI/src/Components/Pill/Pill";
|
||||
import FieldType from "CommonUI/src/Components/Types/FieldType";
|
||||
import DropdownUtil from "CommonUI/src/Utils/Dropdown";
|
||||
import ModelAPI from "CommonUI/src/Utils/ModelAPI/ModelAPI";
|
||||
import GlobalConfig, { EmailServerType } from "Model/Models/GlobalConfig";
|
||||
import ErrorMessage from "Common/UI/Components/ErrorMessage/ErrorMessage";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import PageLoader from "Common/UI/Components/Loader/PageLoader";
|
||||
import CardModelDetail from "Common/UI/Components/ModelDetail/CardModelDetail";
|
||||
import Page from "Common/UI/Components/Page/Page";
|
||||
import Pill from "Common/UI/Components/Pill/Pill";
|
||||
import FieldType from "Common/UI/Components/Types/FieldType";
|
||||
import DropdownUtil from "Common/UI/Utils/Dropdown";
|
||||
import ModelAPI from "Common/UI/Utils/ModelAPI/ModelAPI";
|
||||
import GlobalConfig, {
|
||||
EmailServerType,
|
||||
} from "Common/Models/DatabaseModels/GlobalConfig";
|
||||
import React, { FunctionComponent, ReactElement, useEffect } from "react";
|
||||
|
||||
const Settings: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -7,16 +7,16 @@ import IsNull from "Common/Types/BaseDatabase/IsNull";
|
||||
import { Green, Red } from "Common/Types/BrandColors";
|
||||
import OneUptimeDate from "Common/Types/Date";
|
||||
import { ErrorFunction, VoidFunction } from "Common/Types/FunctionTypes";
|
||||
import Banner from "CommonUI/src/Components/Banner/Banner";
|
||||
import { ButtonStyleType } from "CommonUI/src/Components/Button/Button";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import ConfirmModal from "CommonUI/src/Components/Modal/ConfirmModal";
|
||||
import ModelTable from "CommonUI/src/Components/ModelTable/ModelTable";
|
||||
import Page from "CommonUI/src/Components/Page/Page";
|
||||
import ProbeElement from "CommonUI/src/Components/Probe/Probe";
|
||||
import Statusbubble from "CommonUI/src/Components/StatusBubble/StatusBubble";
|
||||
import FieldType from "CommonUI/src/Components/Types/FieldType";
|
||||
import Probe from "Model/Models/Probe";
|
||||
import Banner from "Common/UI/Components/Banner/Banner";
|
||||
import { ButtonStyleType } from "Common/UI/Components/Button/Button";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import ConfirmModal from "Common/UI/Components/Modal/ConfirmModal";
|
||||
import ModelTable from "Common/UI/Components/ModelTable/ModelTable";
|
||||
import Page from "Common/UI/Components/Page/Page";
|
||||
import ProbeElement from "Common/UI/Components/Probe/Probe";
|
||||
import Statusbubble from "Common/UI/Components/StatusBubble/StatusBubble";
|
||||
import FieldType from "Common/UI/Components/Types/FieldType";
|
||||
import Probe from "Common/Models/DatabaseModels/Probe";
|
||||
import React, { FunctionComponent, ReactElement, useState } from "react";
|
||||
|
||||
const Settings: FunctionComponent = (): ReactElement => {
|
||||
|
||||
@@ -2,9 +2,9 @@ import PageMap from "../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import IconProp from "Common/Types/Icon/IconProp";
|
||||
import SideMenu from "CommonUI/src/Components/SideMenu/SideMenu";
|
||||
import SideMenuItem from "CommonUI/src/Components/SideMenu/SideMenuItem";
|
||||
import SideMenuSection from "CommonUI/src/Components/SideMenu/SideMenuSection";
|
||||
import SideMenu from "Common/UI/Components/SideMenu/SideMenu";
|
||||
import SideMenuItem from "Common/UI/Components/SideMenu/SideMenuItem";
|
||||
import SideMenuSection from "Common/UI/Components/SideMenu/SideMenuSection";
|
||||
import React, { ReactElement } from "react";
|
||||
|
||||
const DashboardSideMenu: () => JSX.Element = (): ReactElement => {
|
||||
|
||||
@@ -1,31 +1,15 @@
|
||||
import PageMap from "../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import { ErrorFunction } from "Common/Types/FunctionTypes";
|
||||
import { ButtonStyleType } from "CommonUI/src/Components/Button/Button";
|
||||
import FormFieldSchemaType from "CommonUI/src/Components/Forms/Types/FormFieldSchemaType";
|
||||
import ConfirmModal from "CommonUI/src/Components/Modal/ConfirmModal";
|
||||
import ModelTable from "CommonUI/src/Components/ModelTable/ModelTable";
|
||||
import Page from "CommonUI/src/Components/Page/Page";
|
||||
import FieldType from "CommonUI/src/Components/Types/FieldType";
|
||||
import API from "CommonUI/src/Utils/API/API";
|
||||
import ModelAPI from "CommonUI/src/Utils/ModelAPI/ModelAPI";
|
||||
import Navigation from "CommonUI/src/Utils/Navigation";
|
||||
import User from "Model/Models/User";
|
||||
import React, { FunctionComponent, ReactElement, useState } from "react";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import ModelTable from "Common/UI/Components/ModelTable/ModelTable";
|
||||
import Page from "Common/UI/Components/Page/Page";
|
||||
import FieldType from "Common/UI/Components/Types/FieldType";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
const Users: FunctionComponent = (): ReactElement => {
|
||||
const [showConfirmVerifyEmailModal, setShowConfirmVerifyEmailModal] =
|
||||
useState<boolean>(false);
|
||||
const [selectedUser, setSelectedUser] = useState<User | null>(null);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
|
||||
const [isConfimModalLoading, setIsConfirmModalLoading] =
|
||||
useState<boolean>(false);
|
||||
|
||||
const [refreshItemsTrigger, setRefreshItemsTrigger] =
|
||||
useState<boolean>(false);
|
||||
|
||||
return (
|
||||
<Page
|
||||
title={"Users"}
|
||||
@@ -46,38 +30,13 @@ const Users: FunctionComponent = (): ReactElement => {
|
||||
isDeleteable={false}
|
||||
isEditable={false}
|
||||
showViewIdButton={true}
|
||||
refreshToggle={refreshItemsTrigger}
|
||||
isCreateable={true}
|
||||
name="Users"
|
||||
isViewable={false}
|
||||
isViewable={true}
|
||||
cardProps={{
|
||||
title: "Users",
|
||||
description: "Here is a list of users in OneUptime.",
|
||||
}}
|
||||
actionButtons={[
|
||||
{
|
||||
title: "Verify Email",
|
||||
buttonStyleType: ButtonStyleType.NORMAL,
|
||||
isVisible: (item: User) => {
|
||||
return !item.isEmailVerified;
|
||||
},
|
||||
onClick: async (
|
||||
item: User,
|
||||
onCompleteAction: VoidFunction,
|
||||
onError: ErrorFunction,
|
||||
) => {
|
||||
try {
|
||||
setSelectedUser(item);
|
||||
setShowConfirmVerifyEmailModal(true);
|
||||
|
||||
onCompleteAction();
|
||||
} catch (err) {
|
||||
onCompleteAction();
|
||||
onError(err as Error);
|
||||
}
|
||||
},
|
||||
},
|
||||
]}
|
||||
noItemsMessage={"No users found."}
|
||||
formFields={[
|
||||
{
|
||||
@@ -164,53 +123,6 @@ const Users: FunctionComponent = (): ReactElement => {
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
{error ? (
|
||||
<ConfirmModal
|
||||
title={`Error`}
|
||||
description={error}
|
||||
submitButtonText={"Close"}
|
||||
onSubmit={async () => {
|
||||
setError(null);
|
||||
}}
|
||||
submitButtonType={ButtonStyleType.NORMAL}
|
||||
/>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
|
||||
{showConfirmVerifyEmailModal && selectedUser ? (
|
||||
<ConfirmModal
|
||||
title={`Verify Email`}
|
||||
description={`Are you sure you want to verify the email - ${selectedUser.email}?`}
|
||||
isLoading={isConfimModalLoading}
|
||||
submitButtonText={"Verify Email"}
|
||||
onClose={async () => {
|
||||
setShowConfirmVerifyEmailModal(false);
|
||||
setSelectedUser(null);
|
||||
}}
|
||||
onSubmit={async () => {
|
||||
try {
|
||||
setIsConfirmModalLoading(true);
|
||||
await ModelAPI.updateById<User>({
|
||||
modelType: User,
|
||||
id: selectedUser.id!,
|
||||
data: {
|
||||
isEmailVerified: true,
|
||||
},
|
||||
});
|
||||
} catch (err) {
|
||||
setError(API.getFriendlyMessage(err as Error));
|
||||
}
|
||||
|
||||
setRefreshItemsTrigger(!refreshItemsTrigger);
|
||||
setIsConfirmModalLoading(false);
|
||||
setShowConfirmVerifyEmailModal(false);
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
</Page>
|
||||
);
|
||||
};
|
||||
|
||||
50
AdminDashboard/src/Pages/Users/View/Delete.tsx
Normal file
50
AdminDashboard/src/Pages/Users/View/Delete.tsx
Normal file
@@ -0,0 +1,50 @@
|
||||
import PageMap from "../../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import ModelDelete from "Common/UI/Components/ModelDelete/ModelDelete";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
import SideMenuComponent from "./SideMenu";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import ModelPage from "Common/UI/Components/Page/ModelPage";
|
||||
|
||||
const DeletePage: FunctionComponent = (): ReactElement => {
|
||||
const modelId: ObjectID = Navigation.getLastParamAsObjectID(1);
|
||||
|
||||
return (
|
||||
<ModelPage
|
||||
modelId={modelId}
|
||||
modelNameField="email"
|
||||
modelType={User}
|
||||
title={"User"}
|
||||
breadcrumbLinks={[
|
||||
{
|
||||
title: "Admin Dashboard",
|
||||
to: RouteUtil.populateRouteParams(RouteMap[PageMap.HOME] as Route),
|
||||
},
|
||||
{
|
||||
title: "Users",
|
||||
to: RouteUtil.populateRouteParams(RouteMap[PageMap.USERS] as Route),
|
||||
},
|
||||
{
|
||||
title: "User",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.USER_VIEW] as Route,
|
||||
),
|
||||
},
|
||||
]}
|
||||
sideMenu={<SideMenuComponent modelId={modelId} />}
|
||||
>
|
||||
<ModelDelete
|
||||
modelType={User}
|
||||
modelId={modelId}
|
||||
onDeleteSuccess={() => {
|
||||
Navigation.navigate(RouteMap[PageMap.USERS] as Route);
|
||||
}}
|
||||
/>
|
||||
</ModelPage>
|
||||
);
|
||||
};
|
||||
|
||||
export default DeletePage;
|
||||
136
AdminDashboard/src/Pages/Users/View/Index.tsx
Normal file
136
AdminDashboard/src/Pages/Users/View/Index.tsx
Normal file
@@ -0,0 +1,136 @@
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import PageMap from "../../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import Navigation from "Common/UI/Utils/Navigation";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
import CardModelDetail from "Common/UI/Components/ModelDetail/CardModelDetail";
|
||||
import FormFieldSchemaType from "Common/UI/Components/Forms/Types/FormFieldSchemaType";
|
||||
import FieldType from "Common/UI/Components/Types/FieldType";
|
||||
import ModelPage from "Common/UI/Components/Page/ModelPage";
|
||||
import SideMenuComponent from "./SideMenu";
|
||||
|
||||
const Users: FunctionComponent = (): ReactElement => {
|
||||
const modelId: ObjectID = Navigation.getLastParamAsObjectID();
|
||||
|
||||
return (
|
||||
<ModelPage
|
||||
modelId={modelId}
|
||||
modelNameField="email"
|
||||
modelType={User}
|
||||
title={"User"}
|
||||
breadcrumbLinks={[
|
||||
{
|
||||
title: "Admin Dashboard",
|
||||
to: RouteUtil.populateRouteParams(RouteMap[PageMap.HOME] as Route),
|
||||
},
|
||||
{
|
||||
title: "Users",
|
||||
to: RouteUtil.populateRouteParams(RouteMap[PageMap.USERS] as Route),
|
||||
},
|
||||
{
|
||||
title: "User",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.USER_VIEW] as Route,
|
||||
),
|
||||
},
|
||||
]}
|
||||
sideMenu={<SideMenuComponent modelId={modelId} />}
|
||||
>
|
||||
<div>
|
||||
<CardModelDetail<User>
|
||||
name="User"
|
||||
cardProps={{
|
||||
title: "User",
|
||||
description: "User details",
|
||||
}}
|
||||
isEditable={true}
|
||||
editButtonText="Edit User"
|
||||
formFields={[
|
||||
{
|
||||
field: {
|
||||
name: true,
|
||||
},
|
||||
title: "Name",
|
||||
fieldType: FormFieldSchemaType.Text,
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
field: {
|
||||
email: true,
|
||||
},
|
||||
title: "Email",
|
||||
fieldType: FormFieldSchemaType.Email,
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
field: {
|
||||
isEmailVerified: true,
|
||||
},
|
||||
title: "Email Verified",
|
||||
fieldType: FormFieldSchemaType.Toggle,
|
||||
required: false,
|
||||
},
|
||||
{
|
||||
field: {
|
||||
enableTwoFactorAuth: true,
|
||||
},
|
||||
title: "Two Factor Auth Enabled",
|
||||
fieldType: FormFieldSchemaType.Toggle,
|
||||
required: false,
|
||||
},
|
||||
]}
|
||||
modelDetailProps={{
|
||||
modelType: User,
|
||||
id: "model-detail-user",
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
_id: true,
|
||||
},
|
||||
title: "User ID",
|
||||
fieldType: FieldType.Text,
|
||||
placeholder: "-",
|
||||
},
|
||||
{
|
||||
field: {
|
||||
name: true,
|
||||
},
|
||||
title: "Name",
|
||||
fieldType: FieldType.Text,
|
||||
},
|
||||
{
|
||||
field: {
|
||||
email: true,
|
||||
},
|
||||
title: "Email",
|
||||
fieldType: FieldType.Email,
|
||||
placeholder: "-",
|
||||
},
|
||||
{
|
||||
field: {
|
||||
isEmailVerified: true,
|
||||
},
|
||||
title: "Email Verified",
|
||||
fieldType: FieldType.Boolean,
|
||||
placeholder: "No",
|
||||
},
|
||||
{
|
||||
field: {
|
||||
enableTwoFactorAuth: true,
|
||||
},
|
||||
title: "Two Factor Auth Enabled",
|
||||
fieldType: FieldType.Boolean,
|
||||
placeholder: "No",
|
||||
},
|
||||
],
|
||||
modelId: modelId,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</ModelPage>
|
||||
);
|
||||
};
|
||||
|
||||
export default Users;
|
||||
53
AdminDashboard/src/Pages/Users/View/SideMenu.tsx
Normal file
53
AdminDashboard/src/Pages/Users/View/SideMenu.tsx
Normal file
@@ -0,0 +1,53 @@
|
||||
import PageMap from "../../../Utils/PageMap";
|
||||
import RouteMap, { RouteUtil } from "../../../Utils/RouteMap";
|
||||
import Route from "Common/Types/API/Route";
|
||||
import IconProp from "Common/Types/Icon/IconProp";
|
||||
import ObjectID from "Common/Types/ObjectID";
|
||||
import SideMenu from "Common/UI/Components/SideMenu/SideMenu";
|
||||
import SideMenuItem from "Common/UI/Components/SideMenu/SideMenuItem";
|
||||
import SideMenuSection from "Common/UI/Components/SideMenu/SideMenuSection";
|
||||
import React, { FunctionComponent, ReactElement } from "react";
|
||||
|
||||
export interface SideMenuProps {
|
||||
modelId: ObjectID;
|
||||
}
|
||||
|
||||
const SideMenuComponent: FunctionComponent<SideMenuProps> = (
|
||||
props: SideMenuProps,
|
||||
): ReactElement => {
|
||||
return (
|
||||
<SideMenu>
|
||||
<SideMenuSection title="Basic">
|
||||
<SideMenuItem
|
||||
link={{
|
||||
title: "Overview",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.USER_VIEW] as Route,
|
||||
{
|
||||
modelId: props.modelId,
|
||||
},
|
||||
),
|
||||
}}
|
||||
icon={IconProp.Info}
|
||||
/>
|
||||
</SideMenuSection>
|
||||
|
||||
<SideMenuSection title="Advanced">
|
||||
<SideMenuItem
|
||||
link={{
|
||||
title: "Delete",
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.USER_DELETE] as Route,
|
||||
{
|
||||
modelId: props.modelId,
|
||||
},
|
||||
),
|
||||
}}
|
||||
icon={IconProp.Trash}
|
||||
/>
|
||||
</SideMenuSection>
|
||||
</SideMenu>
|
||||
);
|
||||
};
|
||||
|
||||
export default SideMenuComponent;
|
||||
@@ -1,5 +1,5 @@
|
||||
import Dictionary from "Common/Types/Dictionary";
|
||||
import ModelAPI from "CommonUI/src/Utils/ModelAPI/ModelAPI";
|
||||
import ModelAPI from "Common/UI/Utils/ModelAPI/ModelAPI";
|
||||
|
||||
export default class AdminModelAPI extends ModelAPI {
|
||||
public static override getCommonHeaders(): Dictionary<string> {
|
||||
|
||||
@@ -3,8 +3,14 @@ enum PageMap {
|
||||
HOME = "HOME",
|
||||
LOGOUT = "LOGOUT",
|
||||
SETTINGS = "SETTINGS",
|
||||
|
||||
USERS = "USERS",
|
||||
USER_VIEW = "USER_VIEW",
|
||||
USER_DELETE = "USER_DELETE",
|
||||
|
||||
PROJECTS = "PROJECTS",
|
||||
PROJECT_VIEW = "PROJECT_VIEW",
|
||||
PROJECT_DELETE = "PROJECT_DELETE",
|
||||
|
||||
SETTINGS_HOST = "SETTINGS_HOST",
|
||||
SETTINGS_SMTP = "SETTINGS_SMTP",
|
||||
|
||||
@@ -9,8 +9,19 @@ const RouteMap: Dictionary<Route> = {
|
||||
[PageMap.HOME]: new Route(`/admin`),
|
||||
[PageMap.LOGOUT]: new Route(`/admin/logout`),
|
||||
[PageMap.SETTINGS]: new Route(`/admin/settings/host`),
|
||||
|
||||
[PageMap.PROJECTS]: new Route(`/admin/projects`),
|
||||
[PageMap.PROJECT_VIEW]: new Route(`/admin/projects/${RouteParams.ModelID}`),
|
||||
[PageMap.PROJECT_DELETE]: new Route(
|
||||
`/admin/projects/${RouteParams.ModelID}/delete`,
|
||||
),
|
||||
|
||||
[PageMap.USERS]: new Route(`/admin/users`),
|
||||
[PageMap.USER_VIEW]: new Route(`/admin/users/${RouteParams.ModelID}`),
|
||||
[PageMap.USER_DELETE]: new Route(
|
||||
`/admin/users/${RouteParams.ModelID}/delete`,
|
||||
),
|
||||
|
||||
[PageMap.SETTINGS_HOST]: new Route(`/admin/settings/host`),
|
||||
[PageMap.SETTINGS_SMTP]: new Route(`/admin/settings/smtp`),
|
||||
[PageMap.SETTINGS_CALL_AND_SMS]: new Route(`/admin/settings/call-and-sms`),
|
||||
|
||||
@@ -38,25 +38,6 @@ RUN sed -i "s/\"version\": \".*\"/\"version\": \"$APP_VERSION\"/g" /usr/src/Comm
|
||||
RUN npm install
|
||||
COPY ./Common /usr/src/Common
|
||||
|
||||
|
||||
WORKDIR /usr/src/Model
|
||||
COPY ./Model/package*.json /usr/src/Model/
|
||||
# Set version in ./Model/package.json to the APP_VERSION
|
||||
RUN sed -i "s/\"version\": \".*\"/\"version\": \"$APP_VERSION\"/g" /usr/src/Model/package.json
|
||||
RUN npm install
|
||||
COPY ./Model /usr/src/Model
|
||||
|
||||
|
||||
|
||||
WORKDIR /usr/src/CommonServer
|
||||
COPY ./CommonServer/package*.json /usr/src/CommonServer/
|
||||
# Set version in ./CommonServer/package.json to the APP_VERSION
|
||||
RUN sed -i "s/\"version\": \".*\"/\"version\": \"$APP_VERSION\"/g" /usr/src/CommonServer/package.json
|
||||
RUN npm install
|
||||
COPY ./CommonServer /usr/src/CommonServer
|
||||
|
||||
|
||||
|
||||
ENV PRODUCTION=true
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
@@ -10,13 +10,13 @@ import StatusServiceHandler from "./Service/Status";
|
||||
import { StaticPath } from "./Utils/Config";
|
||||
import ResourceUtil, { ModelDocumentation } from "./Utils/Resources";
|
||||
import Dictionary from "Common/Types/Dictionary";
|
||||
import FeatureSet from "CommonServer/Types/FeatureSet";
|
||||
import FeatureSet from "Common/Server/Types/FeatureSet";
|
||||
import Express, {
|
||||
ExpressApplication,
|
||||
ExpressRequest,
|
||||
ExpressResponse,
|
||||
ExpressStatic,
|
||||
} from "CommonServer/Utils/Express";
|
||||
} from "Common/Server/Utils/Express";
|
||||
|
||||
const APIReferenceFeatureSet: FeatureSet = {
|
||||
init: async (): Promise<void> => {
|
||||
@@ -25,13 +25,15 @@ const APIReferenceFeatureSet: FeatureSet = {
|
||||
|
||||
const app: ExpressApplication = Express.getExpressApp();
|
||||
|
||||
// Serve static files for the API reference with a cache max age of 30 days
|
||||
app.use("/reference", ExpressStatic(StaticPath, { maxAge: 2592000 }));
|
||||
|
||||
// Index page
|
||||
// Redirect index page to the introduction page
|
||||
app.get(["/reference"], (_req: ExpressRequest, res: ExpressResponse) => {
|
||||
return res.redirect("/reference/introduction");
|
||||
});
|
||||
|
||||
// Handle "Page Not Found" page
|
||||
app.get(
|
||||
["/reference/page-not-found"],
|
||||
(req: ExpressRequest, res: ExpressResponse) => {
|
||||
@@ -39,7 +41,7 @@ const APIReferenceFeatureSet: FeatureSet = {
|
||||
},
|
||||
);
|
||||
|
||||
// All Pages
|
||||
// Handle all other pages based on the "page" parameter
|
||||
app.get(
|
||||
["/reference/:page"],
|
||||
(req: ExpressRequest, res: ExpressResponse) => {
|
||||
@@ -52,6 +54,7 @@ const APIReferenceFeatureSet: FeatureSet = {
|
||||
const currentResource: ModelDocumentation | undefined =
|
||||
ResourceDictionary[page];
|
||||
|
||||
// Execute the appropriate service handler based on the "page" parameter
|
||||
if (req.params["page"] === "permissions") {
|
||||
return PermissionServiceHandler.executeResponse(req, res);
|
||||
} else if (req.params["page"] === "authentication") {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { ViewsPath } from "../Utils/Config";
|
||||
import ResourceUtil, { ModelDocumentation } from "../Utils/Resources";
|
||||
import { ExpressRequest, ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
|
||||
|
||||
// Retrieve resources documentation
|
||||
const Resources: Array<ModelDocumentation> = ResourceUtil.getResources();
|
||||
|
||||
export default class ServiceHandler {
|
||||
@@ -11,12 +12,16 @@ export default class ServiceHandler {
|
||||
): Promise<void> {
|
||||
let pageTitle: string = "";
|
||||
let pageDescription: string = "";
|
||||
|
||||
// Extract page parameter from request
|
||||
const page: string | undefined = req.params["page"];
|
||||
const pageData: any = {};
|
||||
|
||||
// Set default page title and description for the authentication page
|
||||
pageTitle = "Authentication";
|
||||
pageDescription = "Learn how to authenticate requests with OneUptime API";
|
||||
|
||||
// Render the index page with the specified parameters
|
||||
return res.render(`${ViewsPath}/pages/index`, {
|
||||
page: page,
|
||||
resources: Resources,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { CodeExamplesPath, ViewsPath } from "../Utils/Config";
|
||||
import ResourceUtil, { ModelDocumentation } from "../Utils/Resources";
|
||||
import LocalCache from "CommonServer/Infrastructure/LocalCache";
|
||||
import { ExpressRequest, ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import LocalFile from "CommonServer/Utils/LocalFile";
|
||||
import LocalCache from "Common/Server/Infrastructure/LocalCache";
|
||||
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
|
||||
import LocalFile from "Common/Server/Utils/LocalFile";
|
||||
|
||||
const Resources: Array<ModelDocumentation> = ResourceUtil.getResources();
|
||||
|
||||
|
||||
@@ -1,22 +1,28 @@
|
||||
import { ViewsPath } from "../Utils/Config";
|
||||
import ResourceUtil, { ModelDocumentation } from "../Utils/Resources";
|
||||
import { ExpressRequest, ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
|
||||
|
||||
// Fetch a list of resources used in the application
|
||||
const Resources: Array<ModelDocumentation> = ResourceUtil.getResources();
|
||||
|
||||
export default class ServiceHandler {
|
||||
// Handles the HTTP response for a given request
|
||||
public static async executeResponse(
|
||||
req: ExpressRequest,
|
||||
res: ExpressResponse,
|
||||
): Promise<void> {
|
||||
let pageTitle: string = "";
|
||||
let pageDescription: string = "";
|
||||
|
||||
// Get the 'page' parameter from the request
|
||||
const page: string | undefined = req.params["page"];
|
||||
const pageData: any = {};
|
||||
|
||||
// Set the default page title and description
|
||||
pageTitle = "Errors";
|
||||
pageDescription = "Learn more about how we return errors from API";
|
||||
|
||||
// Render the response using the given view and data
|
||||
return res.render(`${ViewsPath}/pages/index`, {
|
||||
page: page,
|
||||
resources: Resources,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ViewsPath } from "../Utils/Config";
|
||||
import ResourceUtil, { ModelDocumentation } from "../Utils/Resources";
|
||||
import { ExpressRequest, ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
|
||||
|
||||
// Get all resources and featured resources from ResourceUtil
|
||||
const Resources: Array<ModelDocumentation> = ResourceUtil.getResources();
|
||||
|
||||
@@ -10,9 +10,9 @@ import Permission, {
|
||||
PermissionHelper,
|
||||
PermissionProps,
|
||||
} from "Common/Types/Permission";
|
||||
import LocalCache from "CommonServer/Infrastructure/LocalCache";
|
||||
import { ExpressRequest, ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import LocalFile from "CommonServer/Utils/LocalFile";
|
||||
import LocalCache from "Common/Server/Infrastructure/LocalCache";
|
||||
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
|
||||
import LocalFile from "Common/Server/Utils/LocalFile";
|
||||
|
||||
// Get all resources and resource dictionary
|
||||
const Resources: Array<ModelDocumentation> = ResourceUtil.getResources();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ViewsPath } from "../Utils/Config";
|
||||
import ResourceUtil, { ModelDocumentation } from "../Utils/Resources";
|
||||
import { ExpressRequest, ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
|
||||
|
||||
const Resources: Array<ModelDocumentation> = ResourceUtil.getResources(); // Get an array of model documentation resources
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { CodeExamplesPath, ViewsPath } from "../Utils/Config";
|
||||
import ResourceUtil, { ModelDocumentation } from "../Utils/Resources";
|
||||
import LocalCache from "CommonServer/Infrastructure/LocalCache";
|
||||
import { ExpressRequest, ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import LocalFile from "CommonServer/Utils/LocalFile";
|
||||
import LocalCache from "Common/Server/Infrastructure/LocalCache";
|
||||
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
|
||||
import LocalFile from "Common/Server/Utils/LocalFile";
|
||||
|
||||
const Resources: Array<ModelDocumentation> = ResourceUtil.getResources(); // Get all resources from ResourceUtil
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { ViewsPath } from "../Utils/Config";
|
||||
import ResourceUtil, { ModelDocumentation } from "../Utils/Resources";
|
||||
import { PermissionHelper, PermissionProps } from "Common/Types/Permission";
|
||||
import { ExpressRequest, ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
|
||||
|
||||
const Resources: Array<ModelDocumentation> = ResourceUtil.getResources();
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ViewsPath } from "../Utils/Config";
|
||||
import ResourceUtil, { ModelDocumentation } from "../Utils/Resources";
|
||||
import { ExpressRequest, ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
|
||||
|
||||
const resources: Array<ModelDocumentation> = ResourceUtil.getResources(); // Get resources from ResourceUtil
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import BaseModel from "Common/Models/BaseModel";
|
||||
import BaseModel from "Common/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
||||
import ArrayUtil from "Common/Types/ArrayUtil";
|
||||
import Dictionary from "Common/Types/Dictionary";
|
||||
import { IsBillingEnabled } from "CommonServer/EnvironmentConfig";
|
||||
import Models from "Model/Models/Index";
|
||||
import { IsBillingEnabled } from "Common/Server/EnvironmentConfig";
|
||||
import Models from "Common/Models/DatabaseModels/Index";
|
||||
|
||||
export interface ModelDocumentation {
|
||||
name: string;
|
||||
|
||||
@@ -1,409 +1,430 @@
|
||||
import BaseAPI from "CommonServer/API/BaseAPI";
|
||||
import BaseAnalyticsAPI from "CommonServer/API/BaseAnalyticsAPI";
|
||||
import BillingInvoiceAPI from "CommonServer/API/BillingInvoiceAPI";
|
||||
import BillingPaymentMethodAPI from "CommonServer/API/BillingPaymentMethodAPI";
|
||||
import CopilotCodeRepositoryAPI from "CommonServer/API/CopilotCodeRepositoryAPI";
|
||||
import CopilotActionAPI from "CommonServer/API/CopilotActionAPI";
|
||||
import CopilotPullRequestAPI from "CommonServer/API/CopilotPullRequestAPI";
|
||||
import FileAPI from "CommonServer/API/FileAPI";
|
||||
import GlobalConfigAPI from "CommonServer/API/GlobalConfigAPI";
|
||||
import MonitorGroupAPI from "CommonServer/API/MonitorGroupAPI";
|
||||
import NotificationAPI from "CommonServer/API/NotificationAPI";
|
||||
import TelemetryAPI from "CommonServer/API/TelemetryAPI";
|
||||
import Ingestor from "CommonServer/API/ProbeAPI";
|
||||
import ProjectAPI from "CommonServer/API/ProjectAPI";
|
||||
import ProjectSsoAPI from "CommonServer/API/ProjectSSO";
|
||||
import BaseAPI from "Common/Server/API/BaseAPI";
|
||||
import BaseAnalyticsAPI from "Common/Server/API/BaseAnalyticsAPI";
|
||||
import BillingInvoiceAPI from "Common/Server/API/BillingInvoiceAPI";
|
||||
import BillingPaymentMethodAPI from "Common/Server/API/BillingPaymentMethodAPI";
|
||||
import CopilotCodeRepositoryAPI from "Common/Server/API/CopilotCodeRepositoryAPI";
|
||||
import CopilotActionAPI from "Common/Server/API/CopilotActionAPI";
|
||||
import CopilotPullRequestAPI from "Common/Server/API/CopilotPullRequestAPI";
|
||||
import FileAPI from "Common/Server/API/FileAPI";
|
||||
import GlobalConfigAPI from "Common/Server/API/GlobalConfigAPI";
|
||||
import MonitorGroupAPI from "Common/Server/API/MonitorGroupAPI";
|
||||
import NotificationAPI from "Common/Server/API/NotificationAPI";
|
||||
import TelemetryAPI from "Common/Server/API/TelemetryAPI";
|
||||
import Ingestor from "Common/Server/API/ProbeAPI";
|
||||
import ProjectAPI from "Common/Server/API/ProjectAPI";
|
||||
import ProjectSsoAPI from "Common/Server/API/ProjectSSO";
|
||||
// Import API
|
||||
import ResellerPlanAPI from "CommonServer/API/ResellerPlanAPI";
|
||||
import ShortLinkAPI from "CommonServer/API/ShortLinkAPI";
|
||||
import StatusPageAPI from "CommonServer/API/StatusPageAPI";
|
||||
import StatusPageDomainAPI from "CommonServer/API/StatusPageDomainAPI";
|
||||
import StatusPageSubscriberAPI from "CommonServer/API/StatusPageSubscriberAPI";
|
||||
import UserCallAPI from "CommonServer/API/UserCallAPI";
|
||||
import ResellerPlanAPI from "Common/Server/API/ResellerPlanAPI";
|
||||
import ShortLinkAPI from "Common/Server/API/ShortLinkAPI";
|
||||
import StatusPageAPI from "Common/Server/API/StatusPageAPI";
|
||||
import StatusPageDomainAPI from "Common/Server/API/StatusPageDomainAPI";
|
||||
import StatusPageSubscriberAPI from "Common/Server/API/StatusPageSubscriberAPI";
|
||||
import UserCallAPI from "Common/Server/API/UserCallAPI";
|
||||
import UserTwoFactorAuthAPI from "Common/Server/API/UserTwoFactorAuthAPI";
|
||||
// User Notification methods.
|
||||
import UserEmailAPI from "CommonServer/API/UserEmailAPI";
|
||||
import UserNotificationLogTimelineAPI from "CommonServer/API/UserOnCallLogTimelineAPI";
|
||||
import UserSMSAPI from "CommonServer/API/UserSmsAPI";
|
||||
import UserEmailAPI from "Common/Server/API/UserEmailAPI";
|
||||
import UserNotificationLogTimelineAPI from "Common/Server/API/UserOnCallLogTimelineAPI";
|
||||
import UserSMSAPI from "Common/Server/API/UserSmsAPI";
|
||||
import ApiKeyPermissionService, {
|
||||
Service as ApiKeyPermissionServiceType,
|
||||
} from "CommonServer/Services/ApiKeyPermissionService";
|
||||
} from "Common/Server/Services/ApiKeyPermissionService";
|
||||
import ApiKeyService, {
|
||||
Service as ApiKeyServiceType,
|
||||
} from "CommonServer/Services/ApiKeyService";
|
||||
} from "Common/Server/Services/ApiKeyService";
|
||||
import CallLogService, {
|
||||
Service as CallLogServiceType,
|
||||
} from "CommonServer/Services/CallLogService";
|
||||
} from "Common/Server/Services/CallLogService";
|
||||
import DomainService, {
|
||||
Service as DomainServiceType,
|
||||
} from "CommonServer/Services/DomainService";
|
||||
} from "Common/Server/Services/DomainService";
|
||||
import EmailLogService, {
|
||||
Service as EmailLogServiceType,
|
||||
} from "CommonServer/Services/EmailLogService";
|
||||
} from "Common/Server/Services/EmailLogService";
|
||||
import TelemetryIngestionKeyService, {
|
||||
Service as TelemetryIngestionKeyServiceType,
|
||||
} from "Common/Server/Services/TelemetryIngestionKeyService";
|
||||
import EmailVerificationTokenService, {
|
||||
Service as EmailVerificationTokenServiceType,
|
||||
} from "CommonServer/Services/EmailVerificationTokenService";
|
||||
} from "Common/Server/Services/EmailVerificationTokenService";
|
||||
import IncidentCustomFieldService, {
|
||||
Service as IncidentCustomFieldServiceType,
|
||||
} from "CommonServer/Services/IncidentCustomFieldService";
|
||||
} from "Common/Server/Services/IncidentCustomFieldService";
|
||||
import IncidentInternalNoteService, {
|
||||
Service as IncidentInternalNoteServiceType,
|
||||
} from "CommonServer/Services/IncidentInternalNoteService";
|
||||
} from "Common/Server/Services/IncidentInternalNoteService";
|
||||
import IncidentNoteTemplateService, {
|
||||
Service as IncidentNoteTemplateServiceType,
|
||||
} from "CommonServer/Services/IncidentNoteTemplateService";
|
||||
} from "Common/Server/Services/IncidentNoteTemplateService";
|
||||
import IncidentOwnerTeamService, {
|
||||
Service as IncidentOwnerTeamServiceType,
|
||||
} from "CommonServer/Services/IncidentOwnerTeamService";
|
||||
} from "Common/Server/Services/IncidentOwnerTeamService";
|
||||
import IncidentOwnerUserService, {
|
||||
Service as IncidentOwnerUserServiceType,
|
||||
} from "CommonServer/Services/IncidentOwnerUserService";
|
||||
} from "Common/Server/Services/IncidentOwnerUserService";
|
||||
import IncidentPublicNoteService, {
|
||||
Service as IncidentPublicNoteServiceType,
|
||||
} from "CommonServer/Services/IncidentPublicNoteService";
|
||||
} from "Common/Server/Services/IncidentPublicNoteService";
|
||||
import IncidentService, {
|
||||
Service as IncidentServiceType,
|
||||
} from "CommonServer/Services/IncidentService";
|
||||
} from "Common/Server/Services/IncidentService";
|
||||
import IncidentSeverityService, {
|
||||
Service as IncidentSeverityServiceType,
|
||||
} from "CommonServer/Services/IncidentSeverityService";
|
||||
} from "Common/Server/Services/IncidentSeverityService";
|
||||
import IncidentStateService, {
|
||||
Service as IncidentStateServiceType,
|
||||
} from "CommonServer/Services/IncidentStateService";
|
||||
} from "Common/Server/Services/IncidentStateService";
|
||||
import IncidentStateTimelineService, {
|
||||
Service as IncidentStateTimelineServiceType,
|
||||
} from "CommonServer/Services/IncidentStateTimelineService";
|
||||
} from "Common/Server/Services/IncidentStateTimelineService";
|
||||
import IncidentTemplateOwnerTeamService, {
|
||||
Service as IncidentTemplateOwnerTeamServiceType,
|
||||
} from "CommonServer/Services/IncidentTemplateOwnerTeamService";
|
||||
} from "Common/Server/Services/IncidentTemplateOwnerTeamService";
|
||||
import IncidentTemplateOwnerUserService, {
|
||||
Service as IncidentTemplateOwnerUserServiceType,
|
||||
} from "CommonServer/Services/IncidentTemplateOwnerUserService";
|
||||
} from "Common/Server/Services/IncidentTemplateOwnerUserService";
|
||||
import IncidentTemplateService, {
|
||||
Service as IncidentTemplateServiceType,
|
||||
} from "CommonServer/Services/IncidentTemplateService";
|
||||
} from "Common/Server/Services/IncidentTemplateService";
|
||||
import LabelService, {
|
||||
Service as LabelServiceType,
|
||||
} from "CommonServer/Services/LabelService";
|
||||
} from "Common/Server/Services/LabelService";
|
||||
import LogService, {
|
||||
LogService as LogServiceType,
|
||||
} from "CommonServer/Services/LogService";
|
||||
} from "Common/Server/Services/LogService";
|
||||
|
||||
import TelemetryAttributeService, {
|
||||
TelemetryAttributeService as TelemetryAttributeServiceType,
|
||||
} from "Common/Server/Services/TelemetryAttributeService";
|
||||
|
||||
import MetricService, {
|
||||
MetricService as MetricServiceType,
|
||||
} from "CommonServer/Services/MetricService";
|
||||
} from "Common/Server/Services/MetricService";
|
||||
import MonitorCustomFieldService, {
|
||||
Service as MonitorCustomFieldServiceType,
|
||||
} from "CommonServer/Services/MonitorCustomFieldService";
|
||||
} from "Common/Server/Services/MonitorCustomFieldService";
|
||||
import MonitorGroupOwnerTeamService, {
|
||||
Service as MonitorGroupOwnerTeamServiceType,
|
||||
} from "CommonServer/Services/MonitorGroupOwnerTeamService";
|
||||
} from "Common/Server/Services/MonitorGroupOwnerTeamService";
|
||||
import MonitorGroupOwnerUserService, {
|
||||
Service as MonitorGroupOwnerUserServiceType,
|
||||
} from "CommonServer/Services/MonitorGroupOwnerUserService";
|
||||
} from "Common/Server/Services/MonitorGroupOwnerUserService";
|
||||
import MonitorGroupResourceService, {
|
||||
Service as MonitorGroupResourceServiceType,
|
||||
} from "CommonServer/Services/MonitorGroupResourceService";
|
||||
} from "Common/Server/Services/MonitorGroupResourceService";
|
||||
import MonitorMetricsByMinuteService, {
|
||||
MonitorMetricsByMinuteService as MonitorMetricsByMinuteServiceType,
|
||||
} from "CommonServer/Services/MonitorMetricsByMinuteService";
|
||||
} from "Common/Server/Services/MonitorMetricsByMinuteService";
|
||||
import MonitorOwnerTeamService, {
|
||||
Service as MonitorOwnerTeamServiceType,
|
||||
} from "CommonServer/Services/MonitorOwnerTeamService";
|
||||
} from "Common/Server/Services/MonitorOwnerTeamService";
|
||||
import MonitorOwnerUserService, {
|
||||
Service as MonitorOwnerUserServiceType,
|
||||
} from "CommonServer/Services/MonitorOwnerUserService";
|
||||
} from "Common/Server/Services/MonitorOwnerUserService";
|
||||
import MonitorProbeService, {
|
||||
Service as MonitorProbeServiceType,
|
||||
} from "CommonServer/Services/MonitorProbeService";
|
||||
} from "Common/Server/Services/MonitorProbeService";
|
||||
import MonitorSecretService, {
|
||||
Service as MonitorSecretServiceType,
|
||||
} from "CommonServer/Services/MonitorSecretService";
|
||||
} from "Common/Server/Services/MonitorSecretService";
|
||||
import MonitorService, {
|
||||
Service as MonitorServiceType,
|
||||
} from "CommonServer/Services/MonitorService";
|
||||
} from "Common/Server/Services/MonitorService";
|
||||
import MonitorStatusService, {
|
||||
Service as MonitorStatusServiceType,
|
||||
} from "CommonServer/Services/MonitorStatusService";
|
||||
} from "Common/Server/Services/MonitorStatusService";
|
||||
import MonitorTimelineStatusService, {
|
||||
Service as MonitorTimelineStatusServiceType,
|
||||
} from "CommonServer/Services/MonitorStatusTimelineService";
|
||||
} from "Common/Server/Services/MonitorStatusTimelineService";
|
||||
import OnCallDutyPolicyCustomFieldService, {
|
||||
Service as OnCallDutyPolicyCustomFieldServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyCustomFieldService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyCustomFieldService";
|
||||
import OnCallDutyPolicyEscalationRuleScheduleService, {
|
||||
Service as OnCallDutyPolicyEscalationRuleScheduleServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyEscalationRuleScheduleService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService";
|
||||
import OnCallDutyPolicyEscalationRuleService, {
|
||||
Service as OnCallDutyPolicyEscalationRuleServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyEscalationRuleService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyEscalationRuleService";
|
||||
import OnCallDutyPolicyEscalationRuleTeamService, {
|
||||
Service as OnCallDutyPolicyEscalationRuleTeamServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyEscalationRuleTeamService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyEscalationRuleTeamService";
|
||||
import OnCallDutyPolicyEscalationRuleUserService, {
|
||||
Service as OnCallDutyPolicyEscalationRuleUserServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyEscalationRuleUserService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyEscalationRuleUserService";
|
||||
import OnCallDutyPolicyExecutionLogService, {
|
||||
Service as OnCallDutyPolicyExecutionLogServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyExecutionLogService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyExecutionLogService";
|
||||
import OnCallDutyPolicyExecutionLogTimelineService, {
|
||||
Service as OnCallDutyPolicyExecutionLogTimelineServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyExecutionLogTimelineService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyExecutionLogTimelineService";
|
||||
import OnCallDutyPolicyScheduleLayerService, {
|
||||
Service as OnCallDutyPolicyScheduleLayerServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyScheduleLayerService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyScheduleLayerService";
|
||||
import OnCallDutyPolicyScheduleLayerUserService, {
|
||||
Service as OnCallDutyPolicyScheduleLayerUserServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyScheduleLayerUserService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyScheduleLayerUserService";
|
||||
import OnCallDutyPolicyScheduleService, {
|
||||
Service as OnCallDutyPolicyScheduleServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyScheduleService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyScheduleService";
|
||||
import OnCallDutyPolicyService, {
|
||||
Service as OnCallDutyPolicyServiceType,
|
||||
} from "CommonServer/Services/OnCallDutyPolicyService";
|
||||
} from "Common/Server/Services/OnCallDutyPolicyService";
|
||||
import ProjectCallSMSConfigService, {
|
||||
Service as ProjectCallSMSConfigServiceType,
|
||||
} from "CommonServer/Services/ProjectCallSMSConfigService";
|
||||
} from "Common/Server/Services/ProjectCallSMSConfigService";
|
||||
import ProjectSmtpConfigService, {
|
||||
Service as ProjectSMTPConfigServiceType,
|
||||
} from "CommonServer/Services/ProjectSmtpConfigService";
|
||||
} from "Common/Server/Services/ProjectSmtpConfigService";
|
||||
import PromoCodeService, {
|
||||
Service as PromoCodeServiceType,
|
||||
} from "CommonServer/Services/PromoCodeService";
|
||||
} from "Common/Server/Services/PromoCodeService";
|
||||
import ResellerService, {
|
||||
Service as ResellerServiceType,
|
||||
} from "CommonServer/Services/ResellerService";
|
||||
} from "Common/Server/Services/ResellerService";
|
||||
import ScheduledMaintenanceCustomFieldService, {
|
||||
Service as ScheduledMaintenanceCustomFieldServiceType,
|
||||
} from "CommonServer/Services/ScheduledMaintenanceCustomFieldService";
|
||||
} from "Common/Server/Services/ScheduledMaintenanceCustomFieldService";
|
||||
import ScheduledMaintenanceInternalNoteService, {
|
||||
Service as ScheduledMaintenanceInternalNoteServiceType,
|
||||
} from "CommonServer/Services/ScheduledMaintenanceInternalNoteService";
|
||||
} from "Common/Server/Services/ScheduledMaintenanceInternalNoteService";
|
||||
import ScheduledMaintenanceNoteTemplateService, {
|
||||
Service as ScheduledMaintenanceNoteTemplateServiceType,
|
||||
} from "CommonServer/Services/ScheduledMaintenanceNoteTemplateService";
|
||||
} from "Common/Server/Services/ScheduledMaintenanceNoteTemplateService";
|
||||
import ScheduledMaintenanceOwnerTeamService, {
|
||||
Service as ScheduledMaintenanceOwnerTeamServiceType,
|
||||
} from "CommonServer/Services/ScheduledMaintenanceOwnerTeamService";
|
||||
} from "Common/Server/Services/ScheduledMaintenanceOwnerTeamService";
|
||||
import ScheduledMaintenanceOwnerUserService, {
|
||||
Service as ScheduledMaintenanceOwnerUserServiceType,
|
||||
} from "CommonServer/Services/ScheduledMaintenanceOwnerUserService";
|
||||
} from "Common/Server/Services/ScheduledMaintenanceOwnerUserService";
|
||||
import ScheduledMaintenancePublicNoteService, {
|
||||
Service as ScheduledMaintenancePublicNoteServiceType,
|
||||
} from "CommonServer/Services/ScheduledMaintenancePublicNoteService";
|
||||
} from "Common/Server/Services/ScheduledMaintenancePublicNoteService";
|
||||
import ScheduledMaintenanceService, {
|
||||
Service as ScheduledMaintenanceServiceType,
|
||||
} from "CommonServer/Services/ScheduledMaintenanceService";
|
||||
} from "Common/Server/Services/ScheduledMaintenanceService";
|
||||
import ScheduledMaintenanceStateService, {
|
||||
Service as ScheduledMaintenanceStateServiceType,
|
||||
} from "CommonServer/Services/ScheduledMaintenanceStateService";
|
||||
} from "Common/Server/Services/ScheduledMaintenanceStateService";
|
||||
import ScheduledMaintenanceStateTimelineService, {
|
||||
Service as ScheduledMaintenanceStateTimelineServiceType,
|
||||
} from "CommonServer/Services/ScheduledMaintenanceStateTimelineService";
|
||||
} from "Common/Server/Services/ScheduledMaintenanceStateTimelineService";
|
||||
import ServiceCatalogOwnerTeamService, {
|
||||
Service as ServiceCatalogOwnerTeamServiceType,
|
||||
} from "CommonServer/Services/ServiceCatalogOwnerTeamService";
|
||||
} from "Common/Server/Services/ServiceCatalogOwnerTeamService";
|
||||
import ServiceCatalogOwnerUserService, {
|
||||
Service as ServiceCatalogOwnerUserServiceType,
|
||||
} from "CommonServer/Services/ServiceCatalogOwnerUserService";
|
||||
} from "Common/Server/Services/ServiceCatalogOwnerUserService";
|
||||
import ServiceCatalogService, {
|
||||
Service as ServiceCatalogServiceType,
|
||||
} from "CommonServer/Services/ServiceCatalogService";
|
||||
} from "Common/Server/Services/ServiceCatalogService";
|
||||
import ServiceCopilotCodeRepositoryService, {
|
||||
Service as ServiceCopilotCodeRepositoryType,
|
||||
} from "CommonServer/Services/ServiceCopilotCodeRepositoryService";
|
||||
} from "Common/Server/Services/ServiceCopilotCodeRepositoryService";
|
||||
import ServiceCatalogDependencyService, {
|
||||
Service as ServiceCatalogDependencyServiceType,
|
||||
} from "CommonServer/Services/ServiceCatalogDependencyService";
|
||||
import ServiceCatalogMonitor from "Model/Models/ServiceCatalogMonitor";
|
||||
} from "Common/Server/Services/ServiceCatalogDependencyService";
|
||||
import ServiceCatalogMonitor from "Common/Models/DatabaseModels/ServiceCatalogMonitor";
|
||||
import ServiceCatalogMonitorService, {
|
||||
Service as ServiceCatalogMonitorServiceType,
|
||||
} from "CommonServer/Services/ServiceCatalogMonitorService";
|
||||
} from "Common/Server/Services/ServiceCatalogMonitorService";
|
||||
|
||||
import ServiceCatalogTelemetryService from "Model/Models/ServiceCatalogTelemetryService";
|
||||
import ServiceCatalogTelemetryService from "Common/Models/DatabaseModels/ServiceCatalogTelemetryService";
|
||||
import ServiceCatalogTelemetryServiceService, {
|
||||
Service as ServiceCatalogTelemetryServiceServiceType,
|
||||
} from "CommonServer/Services/ServiceCatalogTelemetryServiceService";
|
||||
} from "Common/Server/Services/ServiceCatalogTelemetryServiceService";
|
||||
|
||||
import ShortLinkService, {
|
||||
Service as ShortLinkServiceType,
|
||||
} from "CommonServer/Services/ShortLinkService";
|
||||
} from "Common/Server/Services/ShortLinkService";
|
||||
import SmsLogService, {
|
||||
Service as SmsLogServiceType,
|
||||
} from "CommonServer/Services/SmsLogService";
|
||||
} from "Common/Server/Services/SmsLogService";
|
||||
import SpanService, {
|
||||
SpanService as SpanServiceType,
|
||||
} from "CommonServer/Services/SpanService";
|
||||
} from "Common/Server/Services/SpanService";
|
||||
import StatusPageAnnouncementService, {
|
||||
Service as StatusPageAnnouncementServiceType,
|
||||
} from "CommonServer/Services/StatusPageAnnouncementService";
|
||||
} from "Common/Server/Services/StatusPageAnnouncementService";
|
||||
import StatusPageCustomFieldService, {
|
||||
Service as StatusPageCustomFieldServiceType,
|
||||
} from "CommonServer/Services/StatusPageCustomFieldService";
|
||||
} from "Common/Server/Services/StatusPageCustomFieldService";
|
||||
import StatusPageFooterLinkService, {
|
||||
Service as StatusPageFooterLinkServiceType,
|
||||
} from "CommonServer/Services/StatusPageFooterLinkService";
|
||||
} from "Common/Server/Services/StatusPageFooterLinkService";
|
||||
import StatusPageGroupService, {
|
||||
Service as StatusPageGroupServiceType,
|
||||
} from "CommonServer/Services/StatusPageGroupService";
|
||||
} from "Common/Server/Services/StatusPageGroupService";
|
||||
import StatusPageHeaderLinkService, {
|
||||
Service as StatusPageHeaderLinkServiceType,
|
||||
} from "CommonServer/Services/StatusPageHeaderLinkService";
|
||||
} from "Common/Server/Services/StatusPageHeaderLinkService";
|
||||
import StatusPageHistoryChartBarColorRuleService, {
|
||||
Service as StatusPageHistoryChartBarColorRuleServiceType,
|
||||
} from "CommonServer/Services/StatusPageHistoryChartBarColorRuleService";
|
||||
} from "Common/Server/Services/StatusPageHistoryChartBarColorRuleService";
|
||||
import StatusPageOwnerTeamService, {
|
||||
Service as StatusPageOwnerTeamServiceType,
|
||||
} from "CommonServer/Services/StatusPageOwnerTeamService";
|
||||
} from "Common/Server/Services/StatusPageOwnerTeamService";
|
||||
import StatusPageOwnerUserService, {
|
||||
Service as StatusPageOwnerUserServiceType,
|
||||
} from "CommonServer/Services/StatusPageOwnerUserService";
|
||||
} from "Common/Server/Services/StatusPageOwnerUserService";
|
||||
import StatusPagePrivateUserService, {
|
||||
Service as StatusPagePrivateUserServiceType,
|
||||
} from "CommonServer/Services/StatusPagePrivateUserService";
|
||||
} from "Common/Server/Services/StatusPagePrivateUserService";
|
||||
import StatusPageResourceService, {
|
||||
Service as StatusPageResourceServiceType,
|
||||
} from "CommonServer/Services/StatusPageResourceService";
|
||||
} from "Common/Server/Services/StatusPageResourceService";
|
||||
import StatusPageSSOService, {
|
||||
Service as StatusPageSSOServiceType,
|
||||
} from "CommonServer/Services/StatusPageSsoService";
|
||||
} from "Common/Server/Services/StatusPageSsoService";
|
||||
import TeamMemberService, {
|
||||
TeamMemberService as TeamMemberServiceType,
|
||||
} from "CommonServer/Services/TeamMemberService";
|
||||
} from "Common/Server/Services/TeamMemberService";
|
||||
import TeamPermissionService, {
|
||||
Service as TeamPermissionServiceType,
|
||||
} from "CommonServer/Services/TeamPermissionService";
|
||||
} from "Common/Server/Services/TeamPermissionService";
|
||||
import TeamService, {
|
||||
Service as TeamServiceType,
|
||||
} from "CommonServer/Services/TeamService";
|
||||
} from "Common/Server/Services/TeamService";
|
||||
import TelemetryServiceService, {
|
||||
Service as TelemetryServiceServiceType,
|
||||
} from "CommonServer/Services/TelemetryServiceService";
|
||||
} from "Common/Server/Services/TelemetryServiceService";
|
||||
import TelemetryUsageBillingService, {
|
||||
Service as TelemetryUsageBillingServiceType,
|
||||
} from "CommonServer/Services/TelemetryUsageBillingService";
|
||||
} from "Common/Server/Services/TelemetryUsageBillingService";
|
||||
import UserNotificationRuleService, {
|
||||
Service as UserNotificationRuleServiceType,
|
||||
} from "CommonServer/Services/UserNotificationRuleService";
|
||||
} from "Common/Server/Services/UserNotificationRuleService";
|
||||
import UserNotificationSettingService, {
|
||||
Service as UserNotificationSettingServiceType,
|
||||
} from "CommonServer/Services/UserNotificationSettingService";
|
||||
} from "Common/Server/Services/UserNotificationSettingService";
|
||||
import UserOnCallLogService, {
|
||||
Service as UserNotificationLogServiceType,
|
||||
} from "CommonServer/Services/UserOnCallLogService";
|
||||
} from "Common/Server/Services/UserOnCallLogService";
|
||||
import UserService, {
|
||||
Service as UserServiceType,
|
||||
} from "CommonServer/Services/UserService";
|
||||
} from "Common/Server/Services/UserService";
|
||||
import WorkflowLogService, {
|
||||
Service as WorkflowLogServiceType,
|
||||
} from "CommonServer/Services/WorkflowLogService";
|
||||
} from "Common/Server/Services/WorkflowLogService";
|
||||
import WorkflowService, {
|
||||
Service as WorkflowServiceType,
|
||||
} from "CommonServer/Services/WorkflowService";
|
||||
} from "Common/Server/Services/WorkflowService";
|
||||
import WorkflowVariableService, {
|
||||
Service as WorkflowVariableServiceType,
|
||||
} from "CommonServer/Services/WorkflowVariableService";
|
||||
} from "Common/Server/Services/WorkflowVariableService";
|
||||
|
||||
import ProbeOwnerTeamService, {
|
||||
Service as ProbeOwnerTeamServiceType,
|
||||
} from "CommonServer/Services/ProbeOwnerTeamService";
|
||||
} from "Common/Server/Services/ProbeOwnerTeamService";
|
||||
|
||||
import ProbeOwnerUserService, {
|
||||
Service as ProbeOwnerUserServiceType,
|
||||
} from "CommonServer/Services/ProbeOwnerUserService";
|
||||
} from "Common/Server/Services/ProbeOwnerUserService";
|
||||
|
||||
import FeatureSet from "CommonServer/Types/FeatureSet";
|
||||
import Express, { ExpressApplication } from "CommonServer/Utils/Express";
|
||||
import Log from "Model/AnalyticsModels/Log";
|
||||
import Metric from "Model/AnalyticsModels/Metric";
|
||||
import MonitorMetricsByMinute from "Model/AnalyticsModels/MonitorMetricsByMinute";
|
||||
import Span from "Model/AnalyticsModels/Span";
|
||||
import ApiKey from "Model/Models/ApiKey";
|
||||
import ApiKeyPermission from "Model/Models/ApiKeyPermission";
|
||||
import CallLog from "Model/Models/CallLog";
|
||||
import Domain from "Model/Models/Domain";
|
||||
import EmailLog from "Model/Models/EmailLog";
|
||||
import EmailVerificationToken from "Model/Models/EmailVerificationToken";
|
||||
import Incident from "Model/Models/Incident";
|
||||
import IncidentCustomField from "Model/Models/IncidentCustomField";
|
||||
import IncidentInternalNote from "Model/Models/IncidentInternalNote";
|
||||
import IncidentNoteTemplate from "Model/Models/IncidentNoteTemplate";
|
||||
import IncidentOwnerTeam from "Model/Models/IncidentOwnerTeam";
|
||||
import IncidentOwnerUser from "Model/Models/IncidentOwnerUser";
|
||||
import IncidentPublicNote from "Model/Models/IncidentPublicNote";
|
||||
import IncidentSeverity from "Model/Models/IncidentSeverity";
|
||||
import IncidentState from "Model/Models/IncidentState";
|
||||
import IncidentStateTimeline from "Model/Models/IncidentStateTimeline";
|
||||
import IncidentTemplate from "Model/Models/IncidentTemplate";
|
||||
import IncidentTemplateOwnerTeam from "Model/Models/IncidentTemplateOwnerTeam";
|
||||
import IncidentTemplateOwnerUser from "Model/Models/IncidentTemplateOwnerUser";
|
||||
import Label from "Model/Models/Label";
|
||||
import Monitor from "Model/Models/Monitor";
|
||||
import MonitorCustomField from "Model/Models/MonitorCustomField";
|
||||
import MonitorGroupOwnerTeam from "Model/Models/MonitorGroupOwnerTeam";
|
||||
import MonitorGroupOwnerUser from "Model/Models/MonitorGroupOwnerUser";
|
||||
import MonitorGroupResource from "Model/Models/MonitorGroupResource";
|
||||
import MonitorOwnerTeam from "Model/Models/MonitorOwnerTeam";
|
||||
import MonitorOwnerUser from "Model/Models/MonitorOwnerUser";
|
||||
import MonitorProbe from "Model/Models/MonitorProbe";
|
||||
import MonitorSecret from "Model/Models/MonitorSecret";
|
||||
import MonitorStatus from "Model/Models/MonitorStatus";
|
||||
import MonitorTimelineStatus from "Model/Models/MonitorStatusTimeline";
|
||||
import OnCallDutyPolicy from "Model/Models/OnCallDutyPolicy";
|
||||
import OnCallDutyPolicyCustomField from "Model/Models/OnCallDutyPolicyCustomField";
|
||||
import OnCallDutyPolicyEscalationRule from "Model/Models/OnCallDutyPolicyEscalationRule";
|
||||
import OnCallDutyPolicyEscalationRuleSchedule from "Model/Models/OnCallDutyPolicyEscalationRuleSchedule";
|
||||
import OnCallDutyPolicyEscalationRuleTeam from "Model/Models/OnCallDutyPolicyEscalationRuleTeam";
|
||||
import OnCallDutyPolicyEscalationRuleUser from "Model/Models/OnCallDutyPolicyEscalationRuleUser";
|
||||
import OnCallDutyPolicyExecutionLog from "Model/Models/OnCallDutyPolicyExecutionLog";
|
||||
import OnCallDutyPolicyExecutionLogTimeline from "Model/Models/OnCallDutyPolicyExecutionLogTimeline";
|
||||
import OnCallDutyPolicySchedule from "Model/Models/OnCallDutyPolicySchedule";
|
||||
import OnCallDutyPolicyScheduleLayer from "Model/Models/OnCallDutyPolicyScheduleLayer";
|
||||
import OnCallDutyPolicyScheduleLayerUser from "Model/Models/OnCallDutyPolicyScheduleLayerUser";
|
||||
import ProjectCallSMSConfig from "Model/Models/ProjectCallSMSConfig";
|
||||
import ProjectSmtpConfig from "Model/Models/ProjectSmtpConfig";
|
||||
import PromoCode from "Model/Models/PromoCode";
|
||||
import Reseller from "Model/Models/Reseller";
|
||||
import ScheduledMaintenance from "Model/Models/ScheduledMaintenance";
|
||||
import ScheduledMaintenanceCustomField from "Model/Models/ScheduledMaintenanceCustomField";
|
||||
import ScheduledMaintenanceInternalNote from "Model/Models/ScheduledMaintenanceInternalNote";
|
||||
import ScheduledMaintenanceNoteTemplate from "Model/Models/ScheduledMaintenanceNoteTemplate";
|
||||
import ScheduledMaintenanceOwnerTeam from "Model/Models/ScheduledMaintenanceOwnerTeam";
|
||||
import ScheduledMaintenanceOwnerUser from "Model/Models/ScheduledMaintenanceOwnerUser";
|
||||
import ScheduledMaintenancePublicNote from "Model/Models/ScheduledMaintenancePublicNote";
|
||||
import ScheduledMaintenanceState from "Model/Models/ScheduledMaintenanceState";
|
||||
import ScheduledMaintenanceStateTimeline from "Model/Models/ScheduledMaintenanceStateTimeline";
|
||||
import ServiceCatalog from "Model/Models/ServiceCatalog";
|
||||
import ServiceCatalogOwnerTeam from "Model/Models/ServiceCatalogOwnerTeam";
|
||||
import ServiceCatalogOwnerUser from "Model/Models/ServiceCatalogOwnerUser";
|
||||
import ServiceCopilotCodeRepository from "Model/Models/ServiceCopilotCodeRepository";
|
||||
import ShortLink from "Model/Models/ShortLink";
|
||||
import SmsLog from "Model/Models/SmsLog";
|
||||
import StatusPageAnnouncement from "Model/Models/StatusPageAnnouncement";
|
||||
import TelemetryExceptionService, {
|
||||
Service as TelemetryExceptionServiceType,
|
||||
} from "Common/Server/Services/TelemetryExceptionService";
|
||||
|
||||
import ExceptionInstanceService, {
|
||||
ExceptionInstanceService as ExceptionInstanceServiceType,
|
||||
} from "Common/Server/Services/ExceptionInstanceService";
|
||||
|
||||
import FeatureSet from "Common/Server/Types/FeatureSet";
|
||||
import Express, { ExpressApplication } from "Common/Server/Utils/Express";
|
||||
import Log from "Common/Models/AnalyticsModels/Log";
|
||||
import Metric from "Common/Models/AnalyticsModels/Metric";
|
||||
import MonitorMetricsByMinute from "Common/Models/AnalyticsModels/MonitorMetricsByMinute";
|
||||
import Span from "Common/Models/AnalyticsModels/Span";
|
||||
import ApiKey from "Common/Models/DatabaseModels/ApiKey";
|
||||
import ApiKeyPermission from "Common/Models/DatabaseModels/ApiKeyPermission";
|
||||
import CallLog from "Common/Models/DatabaseModels/CallLog";
|
||||
import Domain from "Common/Models/DatabaseModels/Domain";
|
||||
import EmailLog from "Common/Models/DatabaseModels/EmailLog";
|
||||
import EmailVerificationToken from "Common/Models/DatabaseModels/EmailVerificationToken";
|
||||
import Incident from "Common/Models/DatabaseModels/Incident";
|
||||
import IncidentCustomField from "Common/Models/DatabaseModels/IncidentCustomField";
|
||||
import IncidentInternalNote from "Common/Models/DatabaseModels/IncidentInternalNote";
|
||||
import IncidentNoteTemplate from "Common/Models/DatabaseModels/IncidentNoteTemplate";
|
||||
import IncidentOwnerTeam from "Common/Models/DatabaseModels/IncidentOwnerTeam";
|
||||
import IncidentOwnerUser from "Common/Models/DatabaseModels/IncidentOwnerUser";
|
||||
import IncidentPublicNote from "Common/Models/DatabaseModels/IncidentPublicNote";
|
||||
import IncidentSeverity from "Common/Models/DatabaseModels/IncidentSeverity";
|
||||
import IncidentState from "Common/Models/DatabaseModels/IncidentState";
|
||||
import IncidentStateTimeline from "Common/Models/DatabaseModels/IncidentStateTimeline";
|
||||
import IncidentTemplate from "Common/Models/DatabaseModels/IncidentTemplate";
|
||||
import IncidentTemplateOwnerTeam from "Common/Models/DatabaseModels/IncidentTemplateOwnerTeam";
|
||||
import IncidentTemplateOwnerUser from "Common/Models/DatabaseModels/IncidentTemplateOwnerUser";
|
||||
import Label from "Common/Models/DatabaseModels/Label";
|
||||
import Monitor from "Common/Models/DatabaseModels/Monitor";
|
||||
import MonitorCustomField from "Common/Models/DatabaseModels/MonitorCustomField";
|
||||
import MonitorGroupOwnerTeam from "Common/Models/DatabaseModels/MonitorGroupOwnerTeam";
|
||||
import MonitorGroupOwnerUser from "Common/Models/DatabaseModels/MonitorGroupOwnerUser";
|
||||
import MonitorGroupResource from "Common/Models/DatabaseModels/MonitorGroupResource";
|
||||
import MonitorOwnerTeam from "Common/Models/DatabaseModels/MonitorOwnerTeam";
|
||||
import MonitorOwnerUser from "Common/Models/DatabaseModels/MonitorOwnerUser";
|
||||
import MonitorProbe from "Common/Models/DatabaseModels/MonitorProbe";
|
||||
import MonitorSecret from "Common/Models/DatabaseModels/MonitorSecret";
|
||||
import MonitorStatus from "Common/Models/DatabaseModels/MonitorStatus";
|
||||
import MonitorTimelineStatus from "Common/Models/DatabaseModels/MonitorStatusTimeline";
|
||||
import OnCallDutyPolicy from "Common/Models/DatabaseModels/OnCallDutyPolicy";
|
||||
import OnCallDutyPolicyCustomField from "Common/Models/DatabaseModels/OnCallDutyPolicyCustomField";
|
||||
import OnCallDutyPolicyEscalationRule from "Common/Models/DatabaseModels/OnCallDutyPolicyEscalationRule";
|
||||
import OnCallDutyPolicyEscalationRuleSchedule from "Common/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleSchedule";
|
||||
import OnCallDutyPolicyEscalationRuleTeam from "Common/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleTeam";
|
||||
import OnCallDutyPolicyEscalationRuleUser from "Common/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleUser";
|
||||
import OnCallDutyPolicyExecutionLog from "Common/Models/DatabaseModels/OnCallDutyPolicyExecutionLog";
|
||||
import OnCallDutyPolicyExecutionLogTimeline from "Common/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline";
|
||||
import OnCallDutyPolicySchedule from "Common/Models/DatabaseModels/OnCallDutyPolicySchedule";
|
||||
import OnCallDutyPolicyScheduleLayer from "Common/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer";
|
||||
import OnCallDutyPolicyScheduleLayerUser from "Common/Models/DatabaseModels/OnCallDutyPolicyScheduleLayerUser";
|
||||
import ProjectCallSMSConfig from "Common/Models/DatabaseModels/ProjectCallSMSConfig";
|
||||
import ProjectSmtpConfig from "Common/Models/DatabaseModels/ProjectSmtpConfig";
|
||||
import PromoCode from "Common/Models/DatabaseModels/PromoCode";
|
||||
import Reseller from "Common/Models/DatabaseModels/Reseller";
|
||||
import ScheduledMaintenance from "Common/Models/DatabaseModels/ScheduledMaintenance";
|
||||
import ScheduledMaintenanceCustomField from "Common/Models/DatabaseModels/ScheduledMaintenanceCustomField";
|
||||
import ScheduledMaintenanceInternalNote from "Common/Models/DatabaseModels/ScheduledMaintenanceInternalNote";
|
||||
import ScheduledMaintenanceNoteTemplate from "Common/Models/DatabaseModels/ScheduledMaintenanceNoteTemplate";
|
||||
import ScheduledMaintenanceOwnerTeam from "Common/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam";
|
||||
import ScheduledMaintenanceOwnerUser from "Common/Models/DatabaseModels/ScheduledMaintenanceOwnerUser";
|
||||
import ScheduledMaintenancePublicNote from "Common/Models/DatabaseModels/ScheduledMaintenancePublicNote";
|
||||
import ScheduledMaintenanceState from "Common/Models/DatabaseModels/ScheduledMaintenanceState";
|
||||
import ScheduledMaintenanceStateTimeline from "Common/Models/DatabaseModels/ScheduledMaintenanceStateTimeline";
|
||||
import ServiceCatalog from "Common/Models/DatabaseModels/ServiceCatalog";
|
||||
import ServiceCatalogOwnerTeam from "Common/Models/DatabaseModels/ServiceCatalogOwnerTeam";
|
||||
import ServiceCatalogOwnerUser from "Common/Models/DatabaseModels/ServiceCatalogOwnerUser";
|
||||
import ServiceCopilotCodeRepository from "Common/Models/DatabaseModels/ServiceCopilotCodeRepository";
|
||||
import ShortLink from "Common/Models/DatabaseModels/ShortLink";
|
||||
import SmsLog from "Common/Models/DatabaseModels/SmsLog";
|
||||
import StatusPageAnnouncement from "Common/Models/DatabaseModels/StatusPageAnnouncement";
|
||||
// Custom Fields API
|
||||
import StatusPageCustomField from "Model/Models/StatusPageCustomField";
|
||||
import StatusPageFooterLink from "Model/Models/StatusPageFooterLink";
|
||||
import StatusPageGroup from "Model/Models/StatusPageGroup";
|
||||
import StatusPageHeaderLink from "Model/Models/StatusPageHeaderLink";
|
||||
import StatusPageHistoryChartBarColorRule from "Model/Models/StatusPageHistoryChartBarColorRule";
|
||||
import StatusPageOwnerTeam from "Model/Models/StatusPageOwnerTeam";
|
||||
import StatusPageOwnerUser from "Model/Models/StatusPageOwnerUser";
|
||||
import StatusPagePrivateUser from "Model/Models/StatusPagePrivateUser";
|
||||
import StatusPageResource from "Model/Models/StatusPageResource";
|
||||
import StatusPageSSO from "Model/Models/StatusPageSso";
|
||||
import Team from "Model/Models/Team";
|
||||
import TeamMember from "Model/Models/TeamMember";
|
||||
import TeamPermission from "Model/Models/TeamPermission";
|
||||
import TelemetryService from "Model/Models/TelemetryService";
|
||||
import TelemetryUsageBilling from "Model/Models/TelemetryUsageBilling";
|
||||
import User from "Model/Models/User";
|
||||
import UserNotificationRule from "Model/Models/UserNotificationRule";
|
||||
import UserNotificationSetting from "Model/Models/UserNotificationSetting";
|
||||
import UserOnCallLog from "Model/Models/UserOnCallLog";
|
||||
import Workflow from "Model/Models/Workflow";
|
||||
import WorkflowLog from "Model/Models/WorkflowLog";
|
||||
import WorkflowVariable from "Model/Models/WorkflowVariable";
|
||||
import ProbeOwnerTeam from "Model/Models/ProbeOwnerTeam";
|
||||
import ProbeOwnerUser from "Model/Models/ProbeOwnerUser";
|
||||
import ServiceCatalogDependency from "Model/Models/ServiceCatalogDependency";
|
||||
import StatusPageCustomField from "Common/Models/DatabaseModels/StatusPageCustomField";
|
||||
import StatusPageFooterLink from "Common/Models/DatabaseModels/StatusPageFooterLink";
|
||||
import StatusPageGroup from "Common/Models/DatabaseModels/StatusPageGroup";
|
||||
import StatusPageHeaderLink from "Common/Models/DatabaseModels/StatusPageHeaderLink";
|
||||
import TelemetryIngestionKey from "Common/Models/DatabaseModels/TelemetryIngestionKey";
|
||||
import StatusPageHistoryChartBarColorRule from "Common/Models/DatabaseModels/StatusPageHistoryChartBarColorRule";
|
||||
import StatusPageOwnerTeam from "Common/Models/DatabaseModels/StatusPageOwnerTeam";
|
||||
import StatusPageOwnerUser from "Common/Models/DatabaseModels/StatusPageOwnerUser";
|
||||
import StatusPagePrivateUser from "Common/Models/DatabaseModels/StatusPagePrivateUser";
|
||||
import StatusPageResource from "Common/Models/DatabaseModels/StatusPageResource";
|
||||
import StatusPageSSO from "Common/Models/DatabaseModels/StatusPageSso";
|
||||
import Team from "Common/Models/DatabaseModels/Team";
|
||||
import TeamMember from "Common/Models/DatabaseModels/TeamMember";
|
||||
import TeamPermission from "Common/Models/DatabaseModels/TeamPermission";
|
||||
import TelemetryService from "Common/Models/DatabaseModels/TelemetryService";
|
||||
import TelemetryUsageBilling from "Common/Models/DatabaseModels/TelemetryUsageBilling";
|
||||
import User from "Common/Models/DatabaseModels/User";
|
||||
import UserNotificationRule from "Common/Models/DatabaseModels/UserNotificationRule";
|
||||
import UserNotificationSetting from "Common/Models/DatabaseModels/UserNotificationSetting";
|
||||
import UserOnCallLog from "Common/Models/DatabaseModels/UserOnCallLog";
|
||||
import Workflow from "Common/Models/DatabaseModels/Workflow";
|
||||
import WorkflowLog from "Common/Models/DatabaseModels/WorkflowLog";
|
||||
import WorkflowVariable from "Common/Models/DatabaseModels/WorkflowVariable";
|
||||
import ProbeOwnerTeam from "Common/Models/DatabaseModels/ProbeOwnerTeam";
|
||||
import ProbeOwnerUser from "Common/Models/DatabaseModels/ProbeOwnerUser";
|
||||
import ServiceCatalogDependency from "Common/Models/DatabaseModels/ServiceCatalogDependency";
|
||||
import TelemetryAttribute from "Common/Models/AnalyticsModels/TelemetryAttribute";
|
||||
import ExceptionInstance from "Common/Models/AnalyticsModels/ExceptionInstance";
|
||||
import TelemetyException from "Common/Models/DatabaseModels/TelemetryException";
|
||||
|
||||
const BaseAPIFeatureSet: FeatureSet = {
|
||||
init: async (): Promise<void> => {
|
||||
@@ -411,6 +432,30 @@ const BaseAPIFeatureSet: FeatureSet = {
|
||||
|
||||
const APP_NAME: string = "api";
|
||||
|
||||
app.use(
|
||||
`/${APP_NAME.toLocaleLowerCase()}`,
|
||||
new BaseAnalyticsAPI<TelemetryAttribute, TelemetryAttributeServiceType>(
|
||||
TelemetryAttribute,
|
||||
TelemetryAttributeService,
|
||||
).getRouter(),
|
||||
);
|
||||
|
||||
app.use(
|
||||
`/${APP_NAME.toLocaleLowerCase()}`,
|
||||
new BaseAnalyticsAPI<ExceptionInstance, ExceptionInstanceServiceType>(
|
||||
ExceptionInstance,
|
||||
ExceptionInstanceService,
|
||||
).getRouter(),
|
||||
);
|
||||
|
||||
app.use(
|
||||
`/${APP_NAME.toLocaleLowerCase()}`,
|
||||
new BaseAPI<TelemetyException, TelemetryExceptionServiceType>(
|
||||
TelemetyException,
|
||||
TelemetryExceptionService,
|
||||
).getRouter(),
|
||||
);
|
||||
|
||||
app.use(
|
||||
`/${APP_NAME.toLocaleLowerCase()}`,
|
||||
new BaseAnalyticsAPI<Log, LogServiceType>(Log, LogService).getRouter(),
|
||||
@@ -432,6 +477,14 @@ const BaseAPIFeatureSet: FeatureSet = {
|
||||
>(MonitorMetricsByMinute, MonitorMetricsByMinuteService).getRouter(),
|
||||
);
|
||||
|
||||
app.use(
|
||||
`/${APP_NAME.toLocaleLowerCase()}`,
|
||||
new BaseAPI<TelemetryIngestionKey, TelemetryIngestionKeyServiceType>(
|
||||
TelemetryIngestionKey,
|
||||
TelemetryIngestionKeyService,
|
||||
).getRouter(),
|
||||
);
|
||||
|
||||
app.use(
|
||||
`/${APP_NAME.toLocaleLowerCase()}`,
|
||||
new BaseAnalyticsAPI<Span, SpanServiceType>(
|
||||
@@ -1100,6 +1153,10 @@ const BaseAPIFeatureSet: FeatureSet = {
|
||||
new UserNotificationLogTimelineAPI().getRouter(),
|
||||
);
|
||||
app.use(`/${APP_NAME.toLocaleLowerCase()}`, new UserCallAPI().getRouter());
|
||||
app.use(
|
||||
`/${APP_NAME.toLocaleLowerCase()}`,
|
||||
new UserTwoFactorAuthAPI().getRouter(),
|
||||
);
|
||||
app.use(`/${APP_NAME.toLocaleLowerCase()}`, new UserEmailAPI().getRouter());
|
||||
app.use(`/${APP_NAME.toLocaleLowerCase()}`, new UserSMSAPI().getRouter());
|
||||
app.use(`/${APP_NAME.toLocaleLowerCase()}`, new Ingestor().getRouter());
|
||||
|
||||
@@ -48,7 +48,7 @@ llm:
|
||||
Run the following command to start the LLM Server:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
You can now access the LLM Server at `http://localhost:8547`.
|
||||
|
||||
@@ -107,7 +107,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
|
||||
# Run Reliability Copilot in Doker Container
|
||||
# Run Reliability Copilot in Docker Container
|
||||
- name: Run Copilot
|
||||
run: |
|
||||
docker run --rm \
|
||||
|
||||
@@ -49,7 +49,7 @@ npm start
|
||||
If you don't like to use npm or do not have it installed, run this instead:
|
||||
|
||||
```
|
||||
# Read env vars from config.env file and run docker-compose up.
|
||||
# Read env vars from config.env file and run docker compose up.
|
||||
(export $(grep -v '^#' config.env | xargs) && docker compose up --remove-orphans -d)
|
||||
|
||||
# Use sudo if you're having permission issues with binding ports.
|
||||
|
||||
@@ -38,7 +38,7 @@ services:
|
||||
Then run the following command:
|
||||
|
||||
```
|
||||
docker-compose up -d
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
If you are self hosting OneUptime, you can change `ONEUPTIME_URL` to your custom self hosted instance.
|
||||
|
||||
@@ -32,23 +32,25 @@ You can find the full list of supported sources [here](https://www.fluentd.org/d
|
||||
- **Step 1: Install Fluentd on your system** - You can install Fluentd using the instructions provided [here](https://docs.fluentd.org/installation)
|
||||
- **Step 2: Sign up for OneUptime account** - You can sign up for a free account [here](https://oneuptime.com). Please note while the account is free, log ingestion is a paid feature. You can find more details about the pricing [here](https://oneuptime.com/pricing).
|
||||
- **Step 3: Create OneUptime Project** - Once you have the account, you can create a project from the OneUptime dashboard. If you need any help with creating a project or have any questions, please reach out to us at support@oneuptime.com
|
||||
- **Step 4: Create a OneUptime Telemetry Service on OneUptime Dashboard**
|
||||
- **Step 4: Create Telemetry Ingestion Token** - Once you have created a OneUptime account, you can create a telemetry ingestion token to ingest logs, metrics and traces from your application.
|
||||
|
||||
On the telemetry service page, click on "Create Telemetry Service" button.
|
||||
After you sign up to OneUptime and create a project. Click on "More" in the Navigation bar and click on "Project Settings".
|
||||
|
||||

|
||||
On the Telemetry Ingestion Key page, click on "Create Ingestion Key" to create a token.
|
||||
|
||||
Once you create a telemetry service, click on "View Service" and you will be redirected to the telemetry service page.
|
||||

|
||||
|
||||
Click on View Service Token and copy the token. You will need this token to configure the telemetry service. **Please keep this token safe.**
|
||||
Once you created a token, click on "View" to view the token.
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
You can use the following configuration to send the telemetry data to the OneUptime HTTP Source. You can add this configuration to the fluentd configuration file. The configuration file is usually located at `/etc/fluentd/fluent.conf` or `/etc/td-agent/td-agent.conf`.
|
||||
|
||||
You need to replace the `YOUR_SERVICE_TOKEN` with the token you created in the previous step. You also need to replace the `YOUR_SERVICE_NAME` with the name of your service. name of the service can be any name you like. If the service does not exist in OneUptime, it will be created automatically.
|
||||
|
||||
```yaml
|
||||
# Match all patterns
|
||||
<match **>
|
||||
@@ -57,7 +59,7 @@ You can use the following configuration to send the telemetry data to the OneUpt
|
||||
endpoint https://oneuptime.com/fluentd/logs
|
||||
open_timeout 2
|
||||
|
||||
headers {"x-oneuptime-service-token":"<YOUR_SERVICE_TOKEN>"}
|
||||
headers {"x-oneuptime-token":"YOUR_SERVICE_TOKEN", "x-oneuptime-service-name":"YOUR_SERVICE_NAME"}
|
||||
|
||||
content_type application/json
|
||||
json_array true
|
||||
@@ -93,7 +95,7 @@ An example of full configuration file is shown below:
|
||||
endpoint https://oneuptime.com/fluentd/logs
|
||||
open_timeout 2
|
||||
|
||||
headers {"x-oneuptime-service-token":"<YOUR_SERVICE_TOKEN>"}
|
||||
headers {"x-oneuptime-token":"YOUR_SERVICE_TOKEN", "x-oneuptime-service-name":"YOUR_SERVICE_NAME"}
|
||||
|
||||
content_type application/json
|
||||
json_array true
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
# Integrate OpenTelemetry (logging, metrics and traces) with OneUptime.
|
||||
|
||||
### Step 1 - Create a OneUptime Telemetry Service.
|
||||
### Step 1 - Create Telemetry Ingestion Token.
|
||||
|
||||
Once you have created a OneUptime account, you can create a telemetry service by clicking on the "Add Service" button.
|
||||
Once you have created a OneUptime account, you can create a telemetry ingestion token to ingest logs, metrics and traces from your application.
|
||||
|
||||
After you sign up to OneUptime and create a project. Click on more in the Navigation bar and click on "Telemetry".
|
||||
After you sign up to OneUptime and create a project. Click on "More" in the Navigation bar and click on "Project Settings".
|
||||
|
||||
On the telemetry service page, click on "Create Telemetry Service" button.
|
||||
On the Telemetry Ingestion Key page, click on "Create Ingestion Key" to create a token.
|
||||
|
||||

|
||||

|
||||
|
||||
Once you create a telemetry service, click on "View Service" and you will be redirected to the telemetry service page.
|
||||
Once you created a token, click on "View" to view the token.
|
||||
|
||||
Click on View Service Token and copy the token. You will need this token to configure the telemetry service. Please keep this token safe.
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
### Step 2 - Configure the telemetry service in your application.
|
||||
@@ -42,14 +40,17 @@ Once you have configured the telemetry service in your application, you can inte
|
||||
|
||||
| Environment Variable | Value |
|
||||
| --- | --- |
|
||||
| OTEL_EXPORTER_OTLP_HEADERS | x-oneuptime-service-token=<YOUR_ONEUPTIME_SERVICE_TOKEN> |
|
||||
| OTEL_EXPORTER_OTLP_HEADERS | x-oneuptime-token=YOUR_ONEUPTIME_SERVICE_TOKEN |
|
||||
| OTEL_EXPORTER_OTLP_ENDPOINT | https://otlp.oneuptime.com |
|
||||
| OTEL_SERVICE_NAME | NAME_OF_YOUR_SERVICE |
|
||||
|
||||
|
||||
**Example**
|
||||
|
||||
```bash
|
||||
export OTEL_EXPORTER_OTLP_HEADERS=x-oneuptime-service-token=9c8806e0-a4aa-11ee-be95-010d5967b068
|
||||
export OTEL_EXPORTER_OTLP_HEADERS=x-oneuptime-token=9c8806e0-a4aa-11ee-be95-010d5967b068
|
||||
export OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp.oneuptime.com
|
||||
export OTEL_SERVICE_NAME=my-service
|
||||
```
|
||||
|
||||
If you're self-hosting oneuptime, this can be changed to your self hosted OpenTelemetry collector endpoint (eg: `http(s)://<your-oneuptime-host>/otlp`)
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import { ContentPath, StaticPath, ViewsPath } from "./Utils/Config";
|
||||
import DocsNav, { NavGroup, NavLink } from "./Utils/Nav";
|
||||
import DocsRender from "./Utils/Render";
|
||||
import FeatureSet from "CommonServer/Types/FeatureSet";
|
||||
import FeatureSet from "Common/Server/Types/FeatureSet";
|
||||
import Express, {
|
||||
ExpressApplication,
|
||||
ExpressRequest,
|
||||
ExpressResponse,
|
||||
ExpressStatic,
|
||||
} from "CommonServer/Utils/Express";
|
||||
import Response from "CommonServer/Utils/Response";
|
||||
import LocalFile from "CommonServer/Utils/LocalFile";
|
||||
import logger from "CommonServer/Utils/Logger";
|
||||
} from "Common/Server/Utils/Express";
|
||||
import Response from "Common/Server/Utils/Response";
|
||||
import LocalFile from "Common/Server/Utils/LocalFile";
|
||||
import logger from "Common/Server/Utils/Logger";
|
||||
import "ejs";
|
||||
|
||||
const DocsFeatureSet: FeatureSet = {
|
||||
@@ -21,6 +21,7 @@ const DocsFeatureSet: FeatureSet = {
|
||||
res.redirect("/docs/introduction/getting-started");
|
||||
});
|
||||
|
||||
// Handle requests to specific documentation pages
|
||||
app.get(
|
||||
"/docs/as-markdown/:categorypath/:pagepath",
|
||||
async (req: ExpressRequest, res: ExpressResponse) => {
|
||||
@@ -49,18 +50,19 @@ const DocsFeatureSet: FeatureSet = {
|
||||
const fullPath: string =
|
||||
`${_req.params["categorypath"]}/${_req.params["pagepath"]}`.toLowerCase();
|
||||
|
||||
// read file from Content folder.
|
||||
// Read Markdown file from content folder
|
||||
let contentInMarkdown: string = await LocalFile.read(
|
||||
`${ContentPath}/${fullPath}.md`,
|
||||
);
|
||||
|
||||
// remove first line from content because we dont want to show title in content. Title is already in nav.
|
||||
|
||||
// Remove first line (title) from content as it is already present in the navigation
|
||||
contentInMarkdown = contentInMarkdown.split("\n").slice(1).join("\n");
|
||||
|
||||
// Render Markdown content to HTML
|
||||
const renderedContent: string =
|
||||
await DocsRender.render(contentInMarkdown);
|
||||
|
||||
// Find the current category and link from DocsNav
|
||||
const currentCategory: NavGroup | undefined = DocsNav.find(
|
||||
(category: NavGroup) => {
|
||||
return category.links.find((link: NavLink) => {
|
||||
@@ -74,6 +76,7 @@ const DocsFeatureSet: FeatureSet = {
|
||||
return link.url.toLocaleLowerCase().includes(fullPath);
|
||||
});
|
||||
|
||||
// If no category or nav link matches the path, render 'not found'
|
||||
if (!currentCategory || !currrentNavLink) {
|
||||
// render not found.
|
||||
|
||||
|
||||
BIN
App/FeatureSet/Docs/Static/images/TelemetryIngestionKeyView.png
Normal file
BIN
App/FeatureSet/Docs/Static/images/TelemetryIngestionKeyView.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 115 KiB |
BIN
App/FeatureSet/Docs/Static/images/TelemetryIngestionKeys.png
Normal file
BIN
App/FeatureSet/Docs/Static/images/TelemetryIngestionKeys.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 187 KiB |
@@ -1,4 +1,4 @@
|
||||
import Markdown, { MarkdownContentType } from "CommonServer/Types/Markdown";
|
||||
import Markdown, { MarkdownContentType } from "Common/Server/Types/Markdown";
|
||||
|
||||
// This class is responsible for rendering markdown content to HTML
|
||||
export default class DocsRender {
|
||||
|
||||
@@ -7,8 +7,8 @@ import Express, {
|
||||
ExpressApplication,
|
||||
ExpressRequest,
|
||||
ExpressResponse,
|
||||
} from "CommonServer/Utils/Express";
|
||||
import logger from "CommonServer/Utils/Logger";
|
||||
} from "Common/Server/Utils/Express";
|
||||
import logger from "Common/Server/Utils/Logger";
|
||||
|
||||
const app: ExpressApplication = Express.getExpressApp();
|
||||
|
||||
|
||||
@@ -10,16 +10,18 @@ import OneUptimeDate from "Common/Types/Date";
|
||||
import Dictionary from "Common/Types/Dictionary";
|
||||
import { JSONObject } from "Common/Types/JSON";
|
||||
import API from "Common/Utils/API";
|
||||
import FeatureSet from "CommonServer/Types/FeatureSet";
|
||||
import FeatureSet from "Common/Server/Types/FeatureSet";
|
||||
import Express, {
|
||||
ExpressApplication,
|
||||
ExpressRequest,
|
||||
ExpressResponse,
|
||||
ExpressStatic,
|
||||
} from "CommonServer/Utils/Express";
|
||||
} from "Common/Server/Utils/Express";
|
||||
import "ejs";
|
||||
import builder from "xmlbuilder2";
|
||||
import { XMLBuilder } from "xmlbuilder2/lib/interfaces";
|
||||
import OSSFriends, { OSSFriend } from "./Utils/OSSFriends";
|
||||
import Reviews from "./Utils/Reviews";
|
||||
|
||||
const HomeFeatureSet: FeatureSet = {
|
||||
init: async (): Promise<void> => {
|
||||
@@ -27,12 +29,17 @@ const HomeFeatureSet: FeatureSet = {
|
||||
|
||||
//Routes
|
||||
app.get("/", (_req: ExpressRequest, res: ExpressResponse) => {
|
||||
const { reviewsList1, reviewsList2, reviewsList3 } = Reviews;
|
||||
|
||||
res.render(`${ViewsPath}/index`, {
|
||||
support: false,
|
||||
footerCards: true,
|
||||
cta: true,
|
||||
blackLogo: false,
|
||||
requestDemoCta: false,
|
||||
reviewsList1,
|
||||
reviewsList2,
|
||||
reviewsList3,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -50,6 +57,20 @@ const HomeFeatureSet: FeatureSet = {
|
||||
res.render(`${ViewsPath}/support`);
|
||||
});
|
||||
|
||||
app.get(
|
||||
"/oss-friends",
|
||||
async (_req: ExpressRequest, res: ExpressResponse) => {
|
||||
res.render(`${ViewsPath}/oss-friends`, {
|
||||
ossFriends: OSSFriends.map((friend: OSSFriend) => {
|
||||
return {
|
||||
...friend,
|
||||
repositoryUrl: friend.repositoryUrl.toString(),
|
||||
};
|
||||
}),
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
app.get("/pricing", (_req: ExpressRequest, res: ExpressResponse) => {
|
||||
const pricing: Array<JSONObject> = [
|
||||
{
|
||||
|
||||
BIN
App/FeatureSet/Home/Static/img/copilot.png
Normal file
BIN
App/FeatureSet/Home/Static/img/copilot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
@@ -1,5 +1,5 @@
|
||||
import AnalyticsBaseModel from "Common/AnalyticsModels/BaseModel";
|
||||
import BaseModel from "Common/Models/BaseModel";
|
||||
import AnalyticsBaseModel from "Common/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel";
|
||||
import BaseModel from "Common/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
||||
import HTTPErrorResponse from "Common/Types/API/HTTPErrorResponse";
|
||||
import HTTPResponse from "Common/Types/API/HTTPResponse";
|
||||
import URL from "Common/Types/API/URL";
|
||||
@@ -9,8 +9,8 @@ import { JSONArray, JSONObject, JSONObjectOrArray } from "Common/Types/JSON";
|
||||
import JSONFunctions from "Common/Types/JSONFunctions";
|
||||
import Text from "Common/Types/Text";
|
||||
import API from "Common/Utils/API";
|
||||
import LocalCache from "CommonServer/Infrastructure/LocalCache";
|
||||
import Markdown, { MarkdownContentType } from "CommonServer/Types/Markdown";
|
||||
import LocalCache from "Common/Server/Infrastructure/LocalCache";
|
||||
import Markdown, { MarkdownContentType } from "Common/Server/Types/Markdown";
|
||||
|
||||
export interface BlogPostAuthor {
|
||||
username: string;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ViewsPath } from "./Config";
|
||||
import { ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import { ExpressResponse } from "Common/Server/Utils/Express";
|
||||
|
||||
export default class NotFoundUtil {
|
||||
public static renderNotFound(res: ExpressResponse): void {
|
||||
|
||||
48
App/FeatureSet/Home/Utils/OSSFriends.ts
Normal file
48
App/FeatureSet/Home/Utils/OSSFriends.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import URL from "Common/Types/API/URL";
|
||||
|
||||
export interface OSSFriend {
|
||||
name: string;
|
||||
description: string;
|
||||
repositoryUrl: URL;
|
||||
}
|
||||
|
||||
const OSSFriends: OSSFriend[] = [
|
||||
{
|
||||
name: "Airbyte",
|
||||
description:
|
||||
"Airbyte is an open-source EL(T) platform that helps you replicate your data in your warehouses, lakes, and databases.",
|
||||
repositoryUrl: URL.fromString("https://github.com/airbytehq/airbyte"),
|
||||
},
|
||||
{
|
||||
name: "Cal.com",
|
||||
description:
|
||||
"Open Source Scheduling: Send a link and meet or build an entire marketplace for humans to connect.",
|
||||
repositoryUrl: URL.fromString("https://github.com/calcom/cal.com"),
|
||||
},
|
||||
{
|
||||
name: "Infiscal",
|
||||
description:
|
||||
"Infisical is an open-source end-to-end platform to manage secrets and configuration across your team and infrastructure.",
|
||||
repositoryUrl: URL.fromString("https://github.com/Infisical/infisical"),
|
||||
},
|
||||
{
|
||||
name: "Metabase",
|
||||
description:
|
||||
"Metabase is the easy, open-source way for everyone in your company to ask questions and learn from data.",
|
||||
repositoryUrl: URL.fromString("https://github.com/metabase/metabase"),
|
||||
},
|
||||
{
|
||||
name: "Posthog",
|
||||
description:
|
||||
"PostHog is open-source product analytics, built for developers.",
|
||||
repositoryUrl: URL.fromString("https://github.com/PostHog/posthog"),
|
||||
},
|
||||
{
|
||||
name: "Twenty",
|
||||
description:
|
||||
"Twenty is building an open-source modern CRM. It's alternative to Salesforce and HubSpot.",
|
||||
repositoryUrl: URL.fromString("https://github.com/twentyhq/twenty"),
|
||||
},
|
||||
];
|
||||
|
||||
export default OSSFriends;
|
||||
270
App/FeatureSet/Home/Utils/Reviews.ts
Normal file
270
App/FeatureSet/Home/Utils/Reviews.ts
Normal file
@@ -0,0 +1,270 @@
|
||||
export interface Review {
|
||||
name: string;
|
||||
text: string;
|
||||
title: string;
|
||||
}
|
||||
|
||||
const reviews: Review[] = [
|
||||
{
|
||||
name: "Charlie",
|
||||
text: "I love the on-call rotation setup. It has made scheduling so much easier.",
|
||||
title: "Great on-call rotation",
|
||||
},
|
||||
{
|
||||
name: "Diana",
|
||||
text: "The performance tracking and log analysis tools are very powerful. Highly recommend!",
|
||||
title: "Powerful tools",
|
||||
},
|
||||
{
|
||||
name: "Ethan",
|
||||
text: "OneUptime's dashboard is very user-friendly and intuitive.",
|
||||
title: "User-friendly dashboard",
|
||||
},
|
||||
{
|
||||
name: "Fiona",
|
||||
text: "The uptime monitoring is very reliable. We haven't missed a single alert.",
|
||||
title: "Reliable monitoring",
|
||||
},
|
||||
{
|
||||
name: "George",
|
||||
text: "The customer support team is very responsive and helpful.",
|
||||
title: "Excellent customer support",
|
||||
},
|
||||
{
|
||||
name: "Hannah",
|
||||
text: "Setting up tests and securing our services has never been easier.",
|
||||
title: "Easy setup and security",
|
||||
},
|
||||
{
|
||||
name: "Ian",
|
||||
text: "The status page feature is fantastic. Our customers appreciate the transparency.",
|
||||
title: "Fantastic status page",
|
||||
},
|
||||
{
|
||||
name: "Jenna",
|
||||
text: "OneUptime has improved our incident response time dramatically.",
|
||||
title: "Improved response time",
|
||||
},
|
||||
{
|
||||
name: "Kevin",
|
||||
text: "The integration with our existing tools was seamless.",
|
||||
title: "Seamless integration",
|
||||
},
|
||||
{
|
||||
name: "Laura",
|
||||
text: "The alerts are very customizable, which is great for our specific needs.",
|
||||
title: "Customizable alerts",
|
||||
},
|
||||
{
|
||||
name: "Mike",
|
||||
text: "The performance tracking has helped us identify and fix issues quickly.",
|
||||
title: "Quick issue resolution",
|
||||
},
|
||||
{
|
||||
name: "Nina",
|
||||
text: "The log analysis feature is very detailed and insightful.",
|
||||
title: "Detailed log analysis",
|
||||
},
|
||||
{
|
||||
name: "Anderson, GK2 Cloud",
|
||||
text: "Thanks for building OneUptime, it really is fantastic. We are getting more excited every day!",
|
||||
title: "OneUptime is fantastic!",
|
||||
},
|
||||
{
|
||||
name: "Reg, Skillable",
|
||||
text: "We use OneUptime to reliably monitor endpoint availability globally, and it delivers.",
|
||||
title: "OneUptime delivers!",
|
||||
},
|
||||
{
|
||||
name: "Oscar",
|
||||
text: "OneUptime has made our monitoring process much more efficient.",
|
||||
title: "Efficient monitoring",
|
||||
},
|
||||
{
|
||||
name: "Paula",
|
||||
text: "The incident management workflow is very well thought out.",
|
||||
title: "Well-designed workflow",
|
||||
},
|
||||
{
|
||||
name: "Quinn",
|
||||
text: "The on-call rotation feature has reduced our scheduling headaches.",
|
||||
title: "Reduced scheduling headaches",
|
||||
},
|
||||
{
|
||||
name: "Rachel",
|
||||
text: "The status page is very professional and easy to update.",
|
||||
title: "Professional status page",
|
||||
},
|
||||
{
|
||||
name: "Sam",
|
||||
text: "The alerts are very accurate and timely.",
|
||||
title: "Accurate alerts",
|
||||
},
|
||||
{
|
||||
name: "Tina",
|
||||
text: "The customer support is always ready to help with any issues.",
|
||||
title: "Supportive customer service",
|
||||
},
|
||||
{
|
||||
name: "Umar",
|
||||
text: "The performance tracking has given us great insights into our system's health.",
|
||||
title: "Great insights",
|
||||
},
|
||||
{
|
||||
name: "Vera",
|
||||
text: "The log analysis has helped us debug errors much faster.",
|
||||
title: "Faster debugging",
|
||||
},
|
||||
{
|
||||
name: "Will",
|
||||
text: "The uptime monitoring is very dependable.",
|
||||
title: "Dependable monitoring",
|
||||
},
|
||||
{
|
||||
name: "Xena",
|
||||
text: "The incident management tools have streamlined our processes.",
|
||||
title: "Streamlined processes",
|
||||
},
|
||||
{
|
||||
name: "Yara",
|
||||
text: "The on-call rotation setup is very flexible.",
|
||||
title: "Flexible rotation setup",
|
||||
},
|
||||
{
|
||||
name: "Zane",
|
||||
text: "The status page has improved our communication with customers.",
|
||||
title: "Improved communication",
|
||||
},
|
||||
{
|
||||
name: "Aiden",
|
||||
text: "The alerts are very precise and help us stay on top of issues.",
|
||||
title: "Precise alerts",
|
||||
},
|
||||
{
|
||||
name: "Bella",
|
||||
text: "The performance tracking tools are very comprehensive.",
|
||||
title: "Comprehensive tools",
|
||||
},
|
||||
{
|
||||
name: "Carter",
|
||||
text: "The log analysis feature is very user-friendly.",
|
||||
title: "User-friendly log analysis",
|
||||
},
|
||||
{
|
||||
name: "Daisy",
|
||||
text: "OneUptime has made our monitoring and management tasks much easier.",
|
||||
title: "Easier management",
|
||||
},
|
||||
{
|
||||
name: "Eli",
|
||||
text: "The incident management feature is very effective.",
|
||||
title: "Effective incident management",
|
||||
},
|
||||
{
|
||||
name: "Faith",
|
||||
text: "The on-call rotation has improved our team's efficiency.",
|
||||
title: "Improved efficiency",
|
||||
},
|
||||
{
|
||||
name: "Gabe",
|
||||
text: "The status page is very easy to set up and maintain.",
|
||||
title: "Easy setup",
|
||||
},
|
||||
{
|
||||
name: "Holly",
|
||||
text: "The alerts are very reliable and timely.",
|
||||
title: "Reliable alerts",
|
||||
},
|
||||
{
|
||||
name: "Isaac",
|
||||
text: "The performance tracking has helped us optimize our system.",
|
||||
title: "Optimized system",
|
||||
},
|
||||
{
|
||||
name: "Jade",
|
||||
text: "The log analysis tools are very detailed and helpful.",
|
||||
title: "Helpful log analysis",
|
||||
},
|
||||
{
|
||||
name: "Kyle",
|
||||
text: "OneUptime has made our monitoring process much more streamlined.",
|
||||
title: "Streamlined monitoring",
|
||||
},
|
||||
{
|
||||
name: "Lily",
|
||||
text: "The incident management workflow is very efficient.",
|
||||
title: "Efficient workflow",
|
||||
},
|
||||
{
|
||||
name: "Mason",
|
||||
text: "The on-call rotation feature is very user-friendly.",
|
||||
title: "User-friendly rotation",
|
||||
},
|
||||
{
|
||||
name: "Nora",
|
||||
text: "The status page has been a great addition to our communication tools.",
|
||||
title: "Great addition",
|
||||
},
|
||||
{
|
||||
name: "Owen",
|
||||
text: "The alerts are very accurate and help us respond quickly.",
|
||||
title: "Quick response",
|
||||
},
|
||||
{
|
||||
name: "Piper",
|
||||
text: "The performance tracking tools are very insightful.",
|
||||
title: "Insightful tools",
|
||||
},
|
||||
{
|
||||
name: "Quincy",
|
||||
text: "The log analysis feature is very comprehensive.",
|
||||
title: "Comprehensive log analysis",
|
||||
},
|
||||
{
|
||||
name: "Riley",
|
||||
text: "OneUptime has made our incident management process much smoother.",
|
||||
title: "Smoother process",
|
||||
},
|
||||
{
|
||||
name: "Sophie",
|
||||
text: "The on-call rotation setup is very efficient.",
|
||||
title: "Efficient setup",
|
||||
},
|
||||
{
|
||||
name: "Tyler",
|
||||
text: "The status page is very professional and easy to use.",
|
||||
title: "Professional and easy",
|
||||
},
|
||||
{
|
||||
name: "Uma",
|
||||
text: "The alerts are very timely and help us stay on top of issues.",
|
||||
title: "Timely alerts",
|
||||
},
|
||||
{
|
||||
name: "Victor",
|
||||
text: "The performance tracking has given us great insights into our system.",
|
||||
title: "Great system insights",
|
||||
},
|
||||
{
|
||||
name: "Wendy",
|
||||
text: "The log analysis tools are very detailed and useful.",
|
||||
title: "Useful log analysis",
|
||||
},
|
||||
];
|
||||
|
||||
// divide reviews array into three equal lists. This is helpful for the UI
|
||||
const reviewsList1: Array<Review> = [];
|
||||
const reviewsList2: Array<Review> = [];
|
||||
const reviewsList3: Array<Review> = [];
|
||||
|
||||
for (let i: number = 0; i < reviews.length; i++) {
|
||||
if (i % 3 === 0) {
|
||||
reviewsList1.push(reviews[i]!);
|
||||
} else if (i % 3 === 1) {
|
||||
reviewsList2.push(reviews[i]!);
|
||||
} else {
|
||||
reviewsList3.push(reviews[i]!);
|
||||
}
|
||||
}
|
||||
|
||||
export default { reviewsList1, reviewsList2, reviewsList3 };
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ViewsPath } from "./Config";
|
||||
import { ExpressResponse } from "CommonServer/Utils/Express";
|
||||
import { ExpressResponse } from "Common/Server/Utils/Express";
|
||||
|
||||
export default class ServerErrorUtil {
|
||||
public static renderServerError(res: ExpressResponse): void {
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="relative isolate overflow-hidden bg-white">
|
||||
<div class="py-24 sm:py-32">
|
||||
|
||||
<%- include('./Partials/BlogTitleAndDescription', { title: 'Engineering Uptime - Blog by OneUptime', description: 'Latest posts on Observability, Monitoring, Reliability and more.' }) -%>
|
||||
<%- include('./Partials/BlogTitleAndDescription', { title: 'Engineering Uptime', smallTitle: '- Blog by OneUptime', description: 'Latest posts on Observability, Monitoring, Reliability and more.' }) -%>
|
||||
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="relative isolate overflow-hidden bg-white">
|
||||
<div class="py-24 sm:py-32">
|
||||
|
||||
<%- include('./Partials/BlogTitleAndDescription', { title: 'Latest posts on '+tagName, description: 'Here are some of the latest posts on '+tagName }) -%>
|
||||
<%- include('./Partials/BlogTitleAndDescription', { title: 'Latest posts on '+tagName, smallTitle: "", description: 'Here are some of the latest posts on '+tagName }) -%>
|
||||
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<div class="mx-auto max-w-8xl px-6 lg:px-8">
|
||||
<div class="mx-auto max-w-4xl text-center">
|
||||
<h1 class="text-3xl font-bold tracking-tight text-gray-900">OneUptime is open source observability platform.</h1>
|
||||
<p class="mt-6 text-lg leading-8 text-gray-600">Monitor, Observe, Debug, Resolve. Everything you need to build reliable software in one open source platform. Get started for free today.</p>
|
||||
<p class="mt-6 text-lg leading-8 text-gray-600">Monitor, Observe, Debug, Resolve. Everything you need to build reliable software in one open source platform. Get started today.</p>
|
||||
<div class="mt-10 flex items-center justify-center gap-x-6">
|
||||
<a href="/accounts/register" class="rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600">Get started</a>
|
||||
<a href="/enterprise/demo" class="text-sm font-semibold leading-6 text-gray-900">Request Demo <span aria-hidden="true">→</span></a>
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
<div class="mb-24">
|
||||
<div class="mx-auto flex justify-center text-center ">
|
||||
<h1 class="max-w-2xl text-center text-4xl font-bold tracking-tight text-gray-900">
|
||||
<h1 class="max-w-5xl text-center text-6xl font-bold text-gray-900 leading-tight">
|
||||
<%= title %>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="mx-auto flex justify-center text-center ">
|
||||
<% if(smallTitle){ %>
|
||||
<h3 class="max-w-5xl mt-5 text-center text-2xl font-medium text-gray-900 leading-tight">
|
||||
<%= smallTitle %>
|
||||
</h3>
|
||||
<% } %>
|
||||
</div>
|
||||
<p class="text-xl text-center leading-8 text-gray-600 mt-8">
|
||||
<p class="text-2xl text-center leading-8 text-gray-600 mt-8 leading-normal">
|
||||
<%= description %>
|
||||
</p>
|
||||
</div>
|
||||
@@ -73,7 +73,7 @@
|
||||
<div class="py-24 sm:py-32">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
|
||||
<%- include('./Partials/BlogTitleAndDescription', { title: blogPost.title , description:
|
||||
<%- include('./Partials/BlogTitleAndDescription', { title: blogPost.title , smallTitle: "", description:
|
||||
blogPost.description }) -%>
|
||||
|
||||
|
||||
|
||||
126
App/FeatureSet/Home/Views/Partials/copilot.ejs
Normal file
126
App/FeatureSet/Home/Views/Partials/copilot.ejs
Normal file
@@ -0,0 +1,126 @@
|
||||
<style>
|
||||
.highlight {
|
||||
background-color: yellow;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
border-radius: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<section class="mb-32 border-gray-100 border-t-2">
|
||||
<div class="relative isolate overflow-hidden bg-white px-6 py-24 sm:py-32 lg:overflow-visible lg:px-0">
|
||||
<div
|
||||
class="mx-auto grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 lg:mx-0 lg:max-w-none lg:grid-cols-2 lg:items-start lg:gap-y-10">
|
||||
<div
|
||||
class="lg:col-span-2 lg:col-start-1 lg:row-start-1 lg:mx-auto lg:grid lg:w-full lg:max-w-7xl lg:grid-cols-2 lg:gap-x-8 lg:px-8">
|
||||
<div class="lg:pr-4">
|
||||
<div class="lg:max-w-lg">
|
||||
<div class="inline-flex space-x-6 mb-5">
|
||||
<span
|
||||
class="rounded-full bg-indigo-600/10 px-3 py-1 text-sm font-semibold leading-6 text-indigo-600 ring-1 ring-inset ring-indigo-600/10">Reliability
|
||||
Copilot</span>
|
||||
</div>
|
||||
<h1 class="mt-2 text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">Spending days debugging?</h1>
|
||||
<p class="mt-6 text-xl leading-8 text-gray-700 ">
|
||||
OneUptime is building next frontier in software observability.
|
||||
<span class="highlight">We not only find issues with your software, but also fix it for you
|
||||
automatically.</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="-ml-12 -mt-12 p-12 lg:sticky lg:top-4 lg:col-start-2 lg:row-span-2 lg:row-start-1 lg:overflow-hidden">
|
||||
<img class="w-[48rem] max-w-none rounded-xl bg-gray-900 shadow-xl ring-1 ring-gray-400/10 sm:w-[57rem]"
|
||||
src="/img/copilot.png" alt="">
|
||||
</div>
|
||||
<div
|
||||
class="lg:col-span-2 lg:col-start-1 lg:row-start-2 lg:mx-auto lg:grid lg:w-full lg:max-w-7xl lg:grid-cols-2 lg:gap-x-8 lg:px-8">
|
||||
<div class="lg:pr-4">
|
||||
<div class="max-w-xl text-base leading-7 text-gray-700 lg:max-w-lg">
|
||||
<p>
|
||||
OneUptime integrates with OpenTelemetry to collect logs, metrics, traces from your software and
|
||||
infrastructure. We then use generative AI to fix the issues
|
||||
in your code.
|
||||
<span class="highlight">All you see is a pull request with the fixes and a detailed report of what was
|
||||
fixed waiting to be reviewed and merged.</span>
|
||||
</p>
|
||||
<ul role="list" class="mt-8 space-y-8 text-gray-600">
|
||||
<li class="flex gap-x-3">
|
||||
<svg class="mt-1 h-5 w-5 flex-none text-indigo-600" viewBox="0 0 20 20" fill="currentColor"
|
||||
aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z" />
|
||||
</svg>
|
||||
<span><strong class="font-semibold text-gray-900">
|
||||
Automatically add telemetry code.
|
||||
</strong>
|
||||
No need to manually add it. Add tracing, metrics, and logs to your codebase with a single
|
||||
click.
|
||||
</span>
|
||||
</li>
|
||||
<li class="flex gap-x-3">
|
||||
<svg class="mt-1 h-5 w-5 flex-none text-indigo-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" class="size-6">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M7.5 3.75H6A2.25 2.25 0 0 0 3.75 6v1.5M16.5 3.75H18A2.25 2.25 0 0 1 20.25 6v1.5m0 9V18A2.25 2.25 0 0 1 18 20.25h-1.5m-9 0H6A2.25 2.25 0 0 1 3.75 18v-1.5M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
|
||||
</svg>
|
||||
|
||||
|
||||
<span><strong class="font-semibold text-gray-900">Fix exceptions automatically.</strong>
|
||||
When we notice exceptions in your traces or logs, we automatically fix the issue in your codebase.
|
||||
</span>
|
||||
</li>
|
||||
<li class="flex gap-x-3">
|
||||
<svg class="mt-1 h-5 w-5 flex-none text-indigo-600" viewBox="0 0 20 20" fill="currentColor"
|
||||
aria-hidden="true">
|
||||
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z" />
|
||||
|
||||
|
||||
</svg>
|
||||
<span><strong class="font-semibold text-gray-900">Improve performance automatically</strong>
|
||||
We look at the traces that take the longest time to execute and and automatically create a pull
|
||||
request with a fix.
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="mt-8">
|
||||
Less time looking at graphs and charts (like in other obervability tools), more time reviewing at fixed code.
|
||||
</p>
|
||||
<h2 class="mt-16 text-2xl font-bold tracking-tight text-gray-900">
|
||||
Enterprise? We have you covered.
|
||||
</h2>
|
||||
<p class="mt-6">
|
||||
<ul role="list" class="mt-8 space-y-8 text-gray-600">
|
||||
<li class="flex gap-x-3">
|
||||
|
||||
<svg class="mt-1 h-5 w-5 flex-none text-indigo-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" class="size-6">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="m21 7.5-9-5.25L3 7.5m18 0-9 5.25m9-5.25v9l-9 5.25M3 7.5l9 5.25M3 7.5v9l9 5.25m0-9v9" />
|
||||
</svg>
|
||||
|
||||
<span><strong class="font-semibold text-gray-900">
|
||||
Use AI model of your choice.
|
||||
</strong>
|
||||
OneUptime works with any AI model of your choice. Self host your AI model and no data or code is sent
|
||||
to us.
|
||||
</span>
|
||||
</li>
|
||||
<li class="flex gap-x-3">
|
||||
|
||||
<svg class="mt-1 h-5 w-5 flex-none text-indigo-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" class="size-6">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5" />
|
||||
</svg>
|
||||
|
||||
<span><strong class="font-semibold text-gray-900">
|
||||
We don't see, store or train on your code.
|
||||
</strong>
|
||||
Regardless whether you are on the free tier or enterprise tier, we don't store or train on your code. No part of your code is sent to us.
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
83
App/FeatureSet/Home/Views/Partials/enterprise-ready.ejs
Normal file
83
App/FeatureSet/Home/Views/Partials/enterprise-ready.ejs
Normal file
@@ -0,0 +1,83 @@
|
||||
<section class="mb-32 border-gray-100 border-t-2">
|
||||
<div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 mb-20 mt-20">
|
||||
<div class="mx-auto max-w-5xl sm:text-center">
|
||||
<h1 class="text-4xl font-semibold tracking-tight text-gray-900 sm:text-center">Enterprise grade, at scale.
|
||||
</h1>
|
||||
<p class="mt-5 text-xl text-gray-500 sm:text-center">Built to support enterprise-grade demands for security,
|
||||
availability, and scale and this is why thousands of our customers trust us every day.</p>
|
||||
</div>
|
||||
<ul role="list"
|
||||
class="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-6 text-sm sm:mt-20 sm:grid-cols-2 md:gap-y-10 lg:max-w-none lg:grid-cols-3">
|
||||
<li class="rounded-2xl border border-gray-200 p-8">
|
||||
<svg fill="none" viewBox="0 0 32 32" aria-hidden="true" stroke-width="1.5" stroke="currentColor"
|
||||
class="h-10 w-10">
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" />
|
||||
</svg>
|
||||
|
||||
<h3 class="mt-6 font-semibold text-gray-900">SSO / SAML Auth</h3>
|
||||
<p class="mt-2 text-gray-700">
|
||||
Use SSO and SAML authentication and integrate with your existing identity provider.
|
||||
</p>
|
||||
</li>
|
||||
<li class="rounded-2xl border border-gray-200 p-8">
|
||||
<svg fill="none" viewBox="0 0 32 32" aria-hidden="true" stroke-width="1.5" stroke="currentColor"
|
||||
class="h-10 w-10">
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M10.5 6h9.75M10.5 6a1.5 1.5 0 1 1-3 0m3 0a1.5 1.5 0 1 0-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-9.75 0h9.75" />
|
||||
</svg>
|
||||
|
||||
<h3 class="mt-6 font-semibold text-gray-900">Advanced Access Controls</h3>
|
||||
<p class="mt-2 text-gray-700">
|
||||
Access controls lets you set fine grained permissions for individual users or teams.
|
||||
</p>
|
||||
</li>
|
||||
<li class="rounded-2xl border border-gray-200 p-8">
|
||||
<svg fill="none" viewBox="0 0 32 32" aria-hidden="true" stroke-width="1.5" stroke="currentColor"
|
||||
class="h-10 w-10">
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z" />
|
||||
</svg>
|
||||
|
||||
<h3 class="mt-6 font-semibold text-gray-900">Dedicated Engineer and Support</h3>
|
||||
<p class="mt-2 text-gray-700">
|
||||
Our team are here to help you with any issues you may have - 24/7/365.
|
||||
</p>
|
||||
</li>
|
||||
<li class="rounded-2xl border border-gray-200 p-8"><svg fill="none" viewBox="0 0 32 32" aria-hidden="true"
|
||||
stroke-width="1.5" stroke="currentColor" class="h-10 w-10">
|
||||
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 0 1 0 3.75H5.625a1.875 1.875 0 0 1 0-3.75Z" />
|
||||
|
||||
</svg>
|
||||
<h3 class="mt-6 font-semibold text-gray-900">Audit Events and Logs</h3>
|
||||
<p class="mt-2 text-gray-700">
|
||||
Document user activities and system events, crucial for security and compliance.
|
||||
</p>
|
||||
</li>
|
||||
<li class="rounded-2xl border border-gray-200 p-8">
|
||||
<svg fill="none" viewBox="0 0 32 32" aria-hidden="true" stroke-width="1.5" stroke="currentColor"
|
||||
class="h-10 w-10">
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125" />
|
||||
</svg>
|
||||
<h3 class="mt-6 font-semibold text-gray-900">Custom Data Residency</h3>
|
||||
<p class="mt-2 text-gray-700">You control your data. Store it on-prem or pick from our US or EU
|
||||
datacenter.</p>
|
||||
</li>
|
||||
<li class="rounded-2xl border border-gray-200 p-8">
|
||||
<svg fill="none" viewBox="0 0 32 32" aria-hidden="true" stroke-width="1.5" stroke="currentColor"
|
||||
class="h-10 w-10">
|
||||
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z" />
|
||||
|
||||
|
||||
</svg>
|
||||
<h3 class="mt-6 font-semibold text-gray-900">SOC 2 Type 2 & ISO Compliant</h3>
|
||||
<p class="mt-2 text-gray-700">We are SOC 2/3, ISO, PCI, HIPAA, CCPA and GDPR Compliant. </p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="relative overflow-hidden bg-white pt-32 pb-32">
|
||||
<div class="max-w-3xl1 px-6">
|
||||
<p class="text-5xl font-bold tracking-tight text-gray-900 sm:text-center">OneUptime is 8+ tools combined
|
||||
<p class="text-4xl font-semibold tracking-tight text-gray-900 sm:text-center">OneUptime is 8+ tools combined
|
||||
into one.</p>
|
||||
<p class="mt-5 text-xl text-gray-500 sm:text-center mb-12">Everything from monitoring, status pages,
|
||||
incident management, on-call schedules - we've got it and we are just getting started!</p>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user