mirror of
https://github.com/bastienwirtz/homer.git
synced 2026-07-18 00:45:57 +00:00
Compare commits
452 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6972395b62 | ||
|
|
a0c286cbf0 | ||
|
|
bfcf203a98 | ||
|
|
a31fa7410d | ||
|
|
4895c3a0c4 | ||
|
|
a33ebec8b7 | ||
|
|
22dd824d5d | ||
|
|
7098f01433 | ||
|
|
c51951d6a8 | ||
|
|
476cd5d441 | ||
|
|
db2a5350ed | ||
|
|
59f6c3c313 | ||
|
|
339a9a31bd | ||
|
|
e360b651d7 | ||
|
|
a1338bd5a5 | ||
|
|
27fcdd8964 | ||
|
|
6260b13572 | ||
|
|
bb26e5e8cb | ||
|
|
9c90387ba1 | ||
|
|
531b1e3f64 | ||
|
|
1d665305c3 | ||
|
|
c46b9a311b | ||
|
|
dd2ccce8dc | ||
|
|
48fd2f5475 | ||
|
|
8953965aed | ||
|
|
ccc64cb7db | ||
|
|
98f446fd85 | ||
|
|
5b7b0fd25d | ||
|
|
a527b325c7 | ||
|
|
5474beb910 | ||
|
|
a935b7198f | ||
|
|
0dafc17569 | ||
|
|
3d5c4a58e6 | ||
|
|
5f84381e34 | ||
|
|
0d5151118c | ||
|
|
a542d9cb58 | ||
|
|
70e9c59046 | ||
|
|
ef5c560a67 | ||
|
|
6367012675 | ||
|
|
d7bee37405 | ||
|
|
4cf69b3a25 | ||
|
|
2e1c7b3d27 | ||
|
|
151c136923 | ||
|
|
2a27bee30e | ||
|
|
d1356c3e6a | ||
|
|
8d82c77630 | ||
|
|
f11c14e764 | ||
|
|
62606e0caf | ||
|
|
184c16d46c | ||
|
|
ee57fa05fb | ||
|
|
8249aa8ae4 | ||
|
|
a4ec46ee35 | ||
|
|
bac62457f1 | ||
|
|
3913c30a56 | ||
|
|
3f49479556 | ||
|
|
6aa29935f6 | ||
|
|
19c5f174e8 | ||
|
|
89a264563a | ||
|
|
d19724b896 | ||
|
|
8a598dbdc0 | ||
|
|
2f4bbee491 | ||
|
|
7bd56d941a | ||
|
|
5a816709e5 | ||
|
|
81c7496264 | ||
|
|
4904717db0 | ||
|
|
92a79ffdfb | ||
|
|
35e49e3d91 | ||
|
|
68fb183c20 | ||
|
|
9054bd8941 | ||
|
|
b821651017 | ||
|
|
5b29bc411c | ||
|
|
06b677ab76 | ||
|
|
843a814ac5 | ||
|
|
1b6c3e6213 | ||
|
|
90ba82de8f | ||
|
|
6f902b78c0 | ||
|
|
9aaef4eaef | ||
|
|
e4588bc634 | ||
|
|
61d5d0b722 | ||
|
|
63647e837a | ||
|
|
2df7d5947b | ||
|
|
8ce2daff4d | ||
|
|
1f2c2058f6 | ||
|
|
a36634c237 | ||
|
|
ee152fd202 | ||
|
|
5eaa479b3c | ||
|
|
11bd5fd9d5 | ||
|
|
da32035841 | ||
|
|
2046d8d30c | ||
|
|
308deb95e0 | ||
|
|
a941e94a3b | ||
|
|
83152453c5 | ||
|
|
b4e20fe8af | ||
|
|
a38514739d | ||
|
|
7ea9b2e882 | ||
|
|
60cc984f12 | ||
|
|
fcf730f610 | ||
|
|
c230392da8 | ||
|
|
adf671772b | ||
|
|
51b4649628 | ||
|
|
6344970eb6 | ||
|
|
3f1d8e01ad | ||
|
|
58a1a0764d | ||
|
|
105937d438 | ||
|
|
abb0cf84bb | ||
|
|
517de68e74 | ||
|
|
1afa0afd00 | ||
|
|
a5eeb1e44e | ||
|
|
acb304adec | ||
|
|
347a3d062b | ||
|
|
15f59b9e36 | ||
|
|
42f3a3ee71 | ||
|
|
ad76093a38 | ||
|
|
9e314c960b | ||
|
|
07207dca55 | ||
|
|
59b0ed7688 | ||
|
|
4684b23a8c | ||
|
|
28ad80369f | ||
|
|
9307f5a926 | ||
|
|
1f6e6e7cce | ||
|
|
cde338a48d | ||
|
|
66e7989e97 | ||
|
|
fef1e8dcbe | ||
|
|
b40d008400 | ||
|
|
f4c026fe2e | ||
|
|
1de57d9423 | ||
|
|
042e4a0529 | ||
|
|
ef95630225 | ||
|
|
68441f2b81 | ||
|
|
5de2344dc2 | ||
|
|
5976f8f561 | ||
|
|
5c4b5e805e | ||
|
|
1ecbef0aca | ||
|
|
4b63b7784f | ||
|
|
deec0aaa68 | ||
|
|
bf531404f5 | ||
|
|
fc10b5c512 | ||
|
|
04164acff3 | ||
|
|
7cc7effd2e | ||
|
|
4a05f0d113 | ||
|
|
d15ebb9d09 | ||
|
|
933e7a0991 | ||
|
|
f0cd8ce91f | ||
|
|
fcf332a31c | ||
|
|
7cb7293abf | ||
|
|
2024297f61 | ||
|
|
a63f9e2c7c | ||
|
|
3f154b07a7 | ||
|
|
6916c2fed3 | ||
|
|
e5bd328d21 | ||
|
|
2a290004b7 | ||
|
|
b11bee7d64 | ||
|
|
234e063d2e | ||
|
|
02ff6a2039 | ||
|
|
e1fdb0069b | ||
|
|
37716c8d42 | ||
|
|
50acb9957e | ||
|
|
76e6c70696 | ||
|
|
c812bda08f | ||
|
|
1b607b6357 | ||
|
|
c546fc1605 | ||
|
|
7dfb3b8faf | ||
|
|
11934c3995 | ||
|
|
60a45191b9 | ||
|
|
4bd449e036 | ||
|
|
a8f7d09bd4 | ||
|
|
2a0387f90e | ||
|
|
12a004a9e1 | ||
|
|
20fb0c2254 | ||
|
|
13fb05696a | ||
|
|
31f7cfa09f | ||
|
|
36d753df58 | ||
|
|
1c09714c43 | ||
|
|
bc0ceee894 | ||
|
|
5a1697a5e6 | ||
|
|
b3e67b5af5 | ||
|
|
cb8a1e992c | ||
|
|
f0bcd50503 | ||
|
|
1d680ab2db | ||
|
|
474dc3ae8c | ||
|
|
1cc724c800 | ||
|
|
986954953b | ||
|
|
6031d57ccb | ||
|
|
3468b9d795 | ||
|
|
45acac744a | ||
|
|
7490a1948f | ||
|
|
741e7f5a1f | ||
|
|
a421a6ba12 | ||
|
|
03cf1c2c42 | ||
|
|
66d4cc36b5 | ||
|
|
aba3b5eed7 | ||
|
|
2f1cbe7328 | ||
|
|
72a5daf705 | ||
|
|
52ac793d45 | ||
|
|
db535442d6 | ||
|
|
47a7831764 | ||
|
|
fa4c10c9a4 | ||
|
|
103168544d | ||
|
|
f150c6c037 | ||
|
|
7909bd1054 | ||
|
|
97bb74a114 | ||
|
|
cbb7977170 | ||
|
|
e58637d935 | ||
|
|
496f9083b2 | ||
|
|
a8629ba80c | ||
|
|
f431551744 | ||
|
|
8d0bc456c1 | ||
|
|
fd919076df | ||
|
|
1e7542b632 | ||
|
|
721a8c2e66 | ||
|
|
9b0e3f595e | ||
|
|
ce9a09ff81 | ||
|
|
0b95836c64 | ||
|
|
92d3d6e922 | ||
|
|
80e458fcb4 | ||
|
|
268ac05821 | ||
|
|
b8ec139112 | ||
|
|
a1c6cb7681 | ||
|
|
900bf058da | ||
|
|
3419a4b6d6 | ||
|
|
b6d9749dea | ||
|
|
29a9cd3ea5 | ||
|
|
3396257528 | ||
|
|
a40acb2fee | ||
|
|
012f472aa7 | ||
|
|
d5921d939b | ||
|
|
b7ebdcaec8 | ||
|
|
88d675d7f5 | ||
|
|
794ac79f52 | ||
|
|
37091fa3d9 | ||
|
|
a666d7aa93 | ||
|
|
f7cc9761e9 | ||
|
|
aa8be8e576 | ||
|
|
546db41ab7 | ||
|
|
1ca9a4b0eb | ||
|
|
18360e223f | ||
|
|
1febbadfba | ||
|
|
779deedecd | ||
|
|
a2866e1714 | ||
|
|
c7a6f54f35 | ||
|
|
b168430fbf | ||
|
|
95f1d94219 | ||
|
|
bbc88262ee | ||
|
|
4c26a49922 | ||
|
|
43678d09c1 | ||
|
|
58b718c2a9 | ||
|
|
cd25756fd0 | ||
|
|
0e5106c42a | ||
|
|
c6571b48b4 | ||
|
|
ea12ee520b | ||
|
|
11cdb50ea5 | ||
|
|
88585186f2 | ||
|
|
2c33b54385 | ||
|
|
842cf8ad2c | ||
|
|
0d0df3d568 | ||
|
|
08bc4f417d | ||
|
|
56a5c0c581 | ||
|
|
aac5885056 | ||
|
|
99697a6a07 | ||
|
|
b760f04962 | ||
|
|
64629742f7 | ||
|
|
f6b124767e | ||
|
|
4797047571 | ||
|
|
2389cac9b0 | ||
|
|
6c438298f2 | ||
|
|
fe25fb03a8 | ||
|
|
359f1ffb53 | ||
|
|
2b83a38fc3 | ||
|
|
4726d8dbc7 | ||
|
|
8196cf71a4 | ||
|
|
5935a62aad | ||
|
|
e23868c594 | ||
|
|
95fde896e0 | ||
|
|
e6adfd7bb7 | ||
|
|
fbc20353ef | ||
|
|
204a9538c8 | ||
|
|
6ab50f11e2 | ||
|
|
765a24e7d0 | ||
|
|
75d8afebe6 | ||
|
|
5872d5fa72 | ||
|
|
7f750127b3 | ||
|
|
8f7752a0b8 | ||
|
|
ce4d3a3dbe | ||
|
|
c53c3957d5 | ||
|
|
efc9b1e0ad | ||
|
|
04c178a51b | ||
|
|
3583c6a420 | ||
|
|
dd820b599f | ||
|
|
76224d85ec | ||
|
|
9cd822b5c4 | ||
|
|
164357c5f9 | ||
|
|
0740fb31b5 | ||
|
|
8326eba25f | ||
|
|
9c537fb926 | ||
|
|
bcebb3e67e | ||
|
|
5f5a508b6e | ||
|
|
b11faee878 | ||
|
|
49d4d742a2 | ||
|
|
a6cbd1c22d | ||
|
|
7e8cc22b0c | ||
|
|
f2f03eb3cc | ||
|
|
c0e7103c67 | ||
|
|
dad372bbe6 | ||
|
|
4d30ab4c4a | ||
|
|
ff136b6a2c | ||
|
|
de4b7e6124 | ||
|
|
ecf664d19b | ||
|
|
7569ec3d2c | ||
|
|
9b77b47022 | ||
|
|
c8470d1e75 | ||
|
|
5b11259dd7 | ||
|
|
74f6879ed0 | ||
|
|
ce2d3e945a | ||
|
|
a3c5b4ac9d | ||
|
|
86f3fbbfaf | ||
|
|
f160caecfa | ||
|
|
504efe01cb | ||
|
|
cce42cc6d1 | ||
|
|
45626232f3 | ||
|
|
6f0193fb32 | ||
|
|
2eb808385b | ||
|
|
018344d911 | ||
|
|
16d3f4f53a | ||
|
|
f682a84e9f | ||
|
|
b1fa1d585a | ||
|
|
b8e3f74e59 | ||
|
|
ce9d164dba | ||
|
|
0a0da84332 | ||
|
|
df903a2c04 | ||
|
|
acd6a8911b | ||
|
|
6cfa1643b4 | ||
|
|
f0f9f0a017 | ||
|
|
6d2d9baf35 | ||
|
|
1707f5adad | ||
|
|
d362add383 | ||
|
|
dfde8ea89d | ||
|
|
1c7451bc81 | ||
|
|
0591208096 | ||
|
|
b7cd8f9482 | ||
|
|
49c2023b8e | ||
|
|
53726ecc1a | ||
|
|
bd122e2700 | ||
|
|
71759ad6fb | ||
|
|
bad762c000 | ||
|
|
70f583c3e1 | ||
|
|
98fe0a3939 | ||
|
|
f62972f659 | ||
|
|
a8292ef757 | ||
|
|
6868a0911b | ||
|
|
c9a6495186 | ||
|
|
d141a69a7d | ||
|
|
beb5755747 | ||
|
|
b5048fc353 | ||
|
|
24b6dedbe1 | ||
|
|
d32f7f6467 | ||
|
|
f72c0bc781 | ||
|
|
bdad8933ff | ||
|
|
51ba5ff503 | ||
|
|
7edcfe0705 | ||
|
|
cfd31b86b5 | ||
|
|
ac5f04f058 | ||
|
|
5bb84dcefb | ||
|
|
de814b9e04 | ||
|
|
3ed40599e5 | ||
|
|
d7fb8f5e3d | ||
|
|
7172b6f507 | ||
|
|
4c9212c93e | ||
|
|
52a136e0de | ||
|
|
956f38a5dc | ||
|
|
0800e9ac3c | ||
|
|
81c90009b4 | ||
|
|
494529f0a9 | ||
|
|
96da0c7ce0 | ||
|
|
4fe179c533 | ||
|
|
13069da195 | ||
|
|
0a03fcd9cd | ||
|
|
73a2a4aa76 | ||
|
|
e6069776ce | ||
|
|
e274807602 | ||
|
|
10f4cca67a | ||
|
|
fdf6d4284d | ||
|
|
84930a632b | ||
|
|
db28142374 | ||
|
|
6c083d6a36 | ||
|
|
5418c6291a | ||
|
|
ae1b04d1c4 | ||
|
|
77167e24ea | ||
|
|
e9faffbb1f | ||
|
|
34259e1e94 | ||
|
|
18d9582d7b | ||
|
|
ba5b98614b | ||
|
|
204a7057e4 | ||
|
|
38c1aa3a78 | ||
|
|
9371c1537c | ||
|
|
b16b69951e | ||
|
|
e68640002a | ||
|
|
746ede73ff | ||
|
|
23990e8509 | ||
|
|
e4ec8a6aa3 | ||
|
|
f031ac440a | ||
|
|
c11c45a661 | ||
|
|
0eca982f8b | ||
|
|
a46bede230 | ||
|
|
eb03092286 | ||
|
|
9582b1871a | ||
|
|
ce391840e5 | ||
|
|
5609315fe7 | ||
|
|
4b639b1c10 | ||
|
|
d57821b5fa | ||
|
|
2f1aff4dc5 | ||
|
|
73d52dbd38 | ||
|
|
5890d41932 | ||
|
|
59994bfee8 | ||
|
|
b4207f2782 | ||
|
|
c80854cb2d | ||
|
|
cbbed6346a | ||
|
|
95c589ba71 | ||
|
|
263be7806c | ||
|
|
bb4ccfb6c7 | ||
|
|
9e57f9bd1d | ||
|
|
b5bf977402 | ||
|
|
71d929a55a | ||
|
|
1b9a3f1975 | ||
|
|
7315b9e28c | ||
|
|
a01c40d4b3 | ||
|
|
a43fe354ec | ||
|
|
1327cc0ab0 | ||
|
|
10f6f123e8 | ||
|
|
e03e759285 | ||
|
|
2b48d1c057 | ||
|
|
fb668b6a3c | ||
|
|
95249e1125 | ||
|
|
132e9a0df5 | ||
|
|
f64278d41d | ||
|
|
95d73348e5 | ||
|
|
d4001281d9 | ||
|
|
7f4130fd04 | ||
|
|
889cdc0fcc | ||
|
|
bf6b543bfb | ||
|
|
4353f5e036 | ||
|
|
9506ed53c8 | ||
|
|
98b460d6fe | ||
|
|
bf2fcc6641 | ||
|
|
2ac75c0534 | ||
|
|
766efb1a19 | ||
|
|
cab7bfd15e | ||
|
|
7e48e099aa | ||
|
|
4f56c2c11b | ||
|
|
049f85221e | ||
|
|
cd75da69f9 | ||
|
|
b6b31e440c | ||
|
|
caf5fae8a8 |
248 changed files with 20993 additions and 10456 deletions
|
|
@ -1,3 +0,0 @@
|
|||
> 1%
|
||||
last 2 versions
|
||||
not dead
|
||||
15
.eslintrc.js
15
.eslintrc.js
|
|
@ -1,15 +0,0 @@
|
|||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
node: true,
|
||||
},
|
||||
extends: ["plugin:vue/essential", "eslint:recommended", "@vue/prettier"],
|
||||
parserOptions: {
|
||||
parser: "babel-eslint",
|
||||
},
|
||||
rules: {
|
||||
"no-console": "off",
|
||||
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"vue/require-v-for-key": "off",
|
||||
},
|
||||
};
|
||||
6
.github/FUNDING.yml
vendored
Normal file
6
.github/FUNDING.yml
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
# These are supported funding model platforms
|
||||
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: [bastienwirtz]
|
||||
buy_me_a_coffee: bastien
|
||||
28
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
28
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Logs & errors**
|
||||
Please include any usefull information:
|
||||
- Errors in your browser console (`ctrl+shift+i` or `F12`)
|
||||
- If applicable, your docker container logs.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Configuration**
|
||||
If applicable, copy related homer yaml configuration here.
|
||||
```yml
|
||||
|
||||
```
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
|
@ -9,10 +9,11 @@ Fixes # (issue)
|
|||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] New feature (non-breaking change which adds functionality)
|
||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||
- [ ] Refactoring
|
||||
|
||||
## Checklist:
|
||||
|
||||
- [ ] I've read & comply with the [contributing guidelines](https://github.com/bastienwirtz/homer/blob/main/CONTRIBUTING.md)
|
||||
- [ ] I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
|
||||
- [ ] I have made corresponding changes to the documentation (README.md).
|
||||
- [ ] I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
|
||||
- [ ] I have made corresponding changes to the documentation (`README.md`).
|
||||
- [ ] I've checked my modifications for any breaking changes, especially in the `config.yml` file
|
||||
|
|
|
|||
8
.github/release.yml
vendored
Normal file
8
.github/release.yml
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
changelog:
|
||||
exclude:
|
||||
authors:
|
||||
- dependabot
|
||||
categories:
|
||||
- title: Main changes
|
||||
labels:
|
||||
- "*"
|
||||
48
.github/workflows/dockerhub.yml
vendored
Normal file
48
.github/workflows/dockerhub.yml
vendored
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# Build & publish docker images
|
||||
name: Dockerhub
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: [v*]
|
||||
|
||||
jobs:
|
||||
dockerhub:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v7
|
||||
-
|
||||
name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v4
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@4
|
||||
-
|
||||
name: Login to Docker Hub
|
||||
uses: docker/login-action@v4
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Login to GHCR
|
||||
uses: docker/login-action@v4
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ github.token }}
|
||||
-
|
||||
name: Build and push
|
||||
uses: docker/build-push-action@v7
|
||||
with:
|
||||
push: true
|
||||
tags: |
|
||||
b4bz/homer:latest
|
||||
b4bz/homer:${{ github.ref_name }}
|
||||
ghcr.io/${{ github.repository }}:latest
|
||||
ghcr.io/${{ github.repository }}:${{ github.ref_name }}
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm/v6,linux/arm64
|
||||
build-args: |
|
||||
VERSION_TAG=${{ github.ref_name }}
|
||||
33
.github/workflows/integration.yml
vendored
33
.github/workflows/integration.yml
vendored
|
|
@ -11,21 +11,24 @@ on:
|
|||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [16.x]
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v7
|
||||
-
|
||||
name: pnpm setup
|
||||
uses: pnpm/action-setup@v6
|
||||
-
|
||||
name: Node.js setup
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'yarn'
|
||||
- run: yarn install
|
||||
- run: yarn lint
|
||||
|
||||
node-version: 24
|
||||
cache: 'pnpm'
|
||||
-
|
||||
name: install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
-
|
||||
name: Check code style & potentential issues
|
||||
run: pnpm lint
|
||||
|
|
|
|||
51
.github/workflows/release.yml
vendored
51
.github/workflows/release.yml
vendored
|
|
@ -1,5 +1,5 @@
|
|||
# Publish pre-build release
|
||||
name: Upload Release Asset
|
||||
name: Create Github release
|
||||
|
||||
on:
|
||||
push:
|
||||
|
|
@ -9,32 +9,35 @@ jobs:
|
|||
build:
|
||||
name: Upload Release Asset
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build project
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v7
|
||||
-
|
||||
name: pnpm setup
|
||||
uses: pnpm/action-setup@v6
|
||||
-
|
||||
name: Node.js setup
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 24
|
||||
cache: 'pnpm'
|
||||
-
|
||||
name: Build project
|
||||
run: |
|
||||
yarn install
|
||||
yarn build
|
||||
- name: Create artifact
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm build
|
||||
-
|
||||
name: Create artifact
|
||||
working-directory: "dist"
|
||||
run: zip -r ../homer.zip ./*
|
||||
- name: Create Release
|
||||
-
|
||||
name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
release_name: Release ${{ github.ref }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
- name: Upload Release Asset
|
||||
id: upload-release-asset
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ./homer.zip
|
||||
asset_name: homer.zip
|
||||
asset_content_type: application/zip
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
generate_release_notes: true
|
||||
files: |
|
||||
homer.zip
|
||||
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -23,4 +23,8 @@ yarn-error.log*
|
|||
# App configuration
|
||||
config.yml
|
||||
|
||||
.drone.yml
|
||||
.drone.yml
|
||||
|
||||
# Specific Agent file
|
||||
CLAUDE.md
|
||||
GEMINI.md
|
||||
|
|
|
|||
8
.jsconfig.json
Normal file
8
.jsconfig.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"@/*": ["./src/*"]
|
||||
}
|
||||
},
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
1
.nvmrc
Normal file
1
.nvmrc
Normal file
|
|
@ -0,0 +1 @@
|
|||
24
|
||||
359
.schema/config-schema.json
Normal file
359
.schema/config-schema.json
Normal file
|
|
@ -0,0 +1,359 @@
|
|||
{
|
||||
"$id": "https://raw.githubusercontent.com/bastienwirtz/homer/main/.schema/config-schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema",
|
||||
"description": "https://github.com/bastienwirtz/homer/blob/main/docs/configuration.md",
|
||||
"examples": [],
|
||||
"title": "Homer Dashboard configuration",
|
||||
"type": "object",
|
||||
"definitions": {
|
||||
"Colors": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"light": {
|
||||
"$ref": "#/definitions/ColorSet"
|
||||
},
|
||||
"dark": {
|
||||
"$ref": "#/definitions/ColorSet"
|
||||
}
|
||||
},
|
||||
"title": "Colors"
|
||||
},
|
||||
"ColorSet": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"highlight-primary": {
|
||||
"type": "string"
|
||||
},
|
||||
"highlight-secondary": {
|
||||
"type": "string"
|
||||
},
|
||||
"highlight-hover": {
|
||||
"type": "string"
|
||||
},
|
||||
"background": {
|
||||
"type": "string"
|
||||
},
|
||||
"card-background": {
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"text-header": {
|
||||
"type": "string"
|
||||
},
|
||||
"text-title": {
|
||||
"type": "string"
|
||||
},
|
||||
"text-subtitle": {
|
||||
"type": "string"
|
||||
},
|
||||
"card-shadow": {
|
||||
"type": "string"
|
||||
},
|
||||
"link": {
|
||||
"type": "string"
|
||||
},
|
||||
"link-hover": {
|
||||
"type": "string"
|
||||
},
|
||||
"background-image": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Defaults": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"layout": {
|
||||
"enum": [
|
||||
"columns",
|
||||
"list"
|
||||
],
|
||||
"description": "Layout of the dashboard, either 'columns' or 'list'"
|
||||
},
|
||||
"colorTheme": {
|
||||
"enum": [
|
||||
"auto",
|
||||
"light",
|
||||
"dark"
|
||||
],
|
||||
"description": "One of 'auto', 'light', or 'dark'"
|
||||
}
|
||||
},
|
||||
"title": "Defaults"
|
||||
},
|
||||
"Hotkey": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"search": {
|
||||
"type": "string",
|
||||
"description": "hotkey for search, e.g. Shift"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"search"
|
||||
]
|
||||
},
|
||||
"Link": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name as seen in the navbar"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Fontawesome icon"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Url of the link. When #filename is used, it is a link to another homer page, while 'filename' is the name of the config file"
|
||||
},
|
||||
"target": {
|
||||
"type": "string",
|
||||
"description": "html tag target attribute like _blank for a new page"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"title": "Link"
|
||||
},
|
||||
"Message": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"url": {
|
||||
"type": "string",
|
||||
"format": "uri"
|
||||
},
|
||||
"mapping": {
|
||||
"$ref": "#/definitions/Mapping",
|
||||
"description": "Mapping for the content loaded from the URL"
|
||||
},
|
||||
"refreshInterval": {
|
||||
"type": "integer",
|
||||
"description": "The refresh interval in milliseconds for reloading the message url"
|
||||
},
|
||||
"style": {
|
||||
"type": "string",
|
||||
"description": "See https://bulma.io/documentation/components/message/#colors for styling options"
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Title of the message box"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Fontawesome icon for the message box"
|
||||
},
|
||||
"content": {
|
||||
"type": "string",
|
||||
"description": "HTML content for the message box"
|
||||
}
|
||||
},
|
||||
"title": "Messagebox"
|
||||
},
|
||||
"Mapping": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"title": "Mapping"
|
||||
},
|
||||
"Proxy": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"useCredentials": {
|
||||
"type": "boolean",
|
||||
"description": "# send cookies & authorization headers when fetching service specific data. Set to `true` if you use an authentication proxy. Can be overrided on service level. "
|
||||
},
|
||||
"headers": {
|
||||
"$ref": "#/definitions/Headers",
|
||||
"description": "send custom headers when fetching service specific data. Can also be set on a service level."
|
||||
}
|
||||
},
|
||||
"title": "Proxy"
|
||||
},
|
||||
"Headers": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"title": "Headers"
|
||||
},
|
||||
"Service": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Service name"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Fontawesome icon for the service"
|
||||
},
|
||||
"logo": {
|
||||
"type": "string",
|
||||
"description": "A path to an image can also be provided. Note that icon take precedence if both icon and logo are set."
|
||||
},
|
||||
"class": {
|
||||
"type": "string",
|
||||
"description": "Optional css class to add on the service group. Example 'highlight-purple'"
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"items"
|
||||
],
|
||||
"title": "Service"
|
||||
},
|
||||
"Item": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"logo": {
|
||||
"type": "string",
|
||||
"description": "Path to a logo. Alternatively a fa icon can be provided"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Fontawesome icon for the item, alternative for logo"
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string"
|
||||
},
|
||||
"tag": {
|
||||
"type": "string",
|
||||
"description": "Show tag"
|
||||
},
|
||||
"keywords": {
|
||||
"type": "string",
|
||||
"description": "Optional keyword used for searching purpose"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Url of this item"
|
||||
},
|
||||
"target": {
|
||||
"type": "string",
|
||||
"description": "html tag target attribute like _blank for a new page"
|
||||
},
|
||||
"tagstyle": {
|
||||
"type": "string",
|
||||
"description": "Styleclass for the tag"
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"description": "Optional, loads a specific component that provides extra features. MUST MATCH a file name (without file extension) available in `src/components/services`"
|
||||
}
|
||||
},
|
||||
"title": "Item"
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"externalConfig": {
|
||||
"type": "string",
|
||||
"description": "Use external configuration file. Using this will ignore remaining config in this file externalConfig: https://example.com/server-luci/config.yaml"
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Title of the dashboard"
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string",
|
||||
"description": "Subtitle of the dashboard"
|
||||
},
|
||||
"documentTitle": {
|
||||
"type": "string",
|
||||
"description": "Title of the document. When not filled, title (and subtitle will be used)"
|
||||
},
|
||||
"logo": {
|
||||
"type": "string",
|
||||
"description": "Path to logo image"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Dashboard icon"
|
||||
},
|
||||
"header": {
|
||||
"type": "boolean",
|
||||
"description": "Show header, default is true"
|
||||
},
|
||||
"hotkey": {
|
||||
"$ref": "#/definitions/Hotkey",
|
||||
"description": "Define hotkeys, for example for search"
|
||||
},
|
||||
"footer": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "footer Line content. HTML is supported. Set false if you want to hide it."
|
||||
},
|
||||
"columns": {
|
||||
"type": "string",
|
||||
"description": "'auto' or number (must be a factor of 12: 1, 2, 3, 4, 6, 12)",
|
||||
"format": "integer"
|
||||
},
|
||||
"connectivityCheck": {
|
||||
"type": "boolean",
|
||||
"description": "# whether you want to display a message when the apps are not accessible anymore (VPN disconnected for example). You should set it to true when using an authentication proxy, it also reloads the page when a redirection is detected when checking connectivity."
|
||||
},
|
||||
"proxy": {
|
||||
"$ref": "#/definitions/Proxy",
|
||||
"description": "Optional: Proxy / hosting option"
|
||||
},
|
||||
"defaults": {
|
||||
"$ref": "#/definitions/Defaults"
|
||||
},
|
||||
"theme": {
|
||||
"type": "string",
|
||||
"description": "'default' or one of the themes available in 'src/assets/themes'"
|
||||
},
|
||||
"stylesheet": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Will load custom CSS files. Especially useful for custom icon sets. Entries are paths to the stylesheets"
|
||||
},
|
||||
"colors": {
|
||||
"$ref": "#/definitions/Colors"
|
||||
},
|
||||
"message": {
|
||||
"$ref": "#/definitions/Message",
|
||||
"description": "Messagebox"
|
||||
},
|
||||
"links": {
|
||||
"description": "Links in the navigation bar",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/Link"
|
||||
}
|
||||
},
|
||||
"services": {
|
||||
"description": "Services",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/Service"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
97
AGENTS.md
Normal file
97
AGENTS.md
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
# AGENTS Instructions
|
||||
|
||||
This file provides guidance to AI Agents when working with code in this repository.
|
||||
|
||||
## Development Commands
|
||||
|
||||
```bash
|
||||
pnpm install # Install dependencies (PNPM enforced via packageManager)
|
||||
pnpm dev # Start development server on http://localhost:3000
|
||||
pnpm mock # Start mock API server for testing service integrations
|
||||
pnpm build # Build for production
|
||||
pnpm preview # Preview production build
|
||||
pnpm lint # Run ESLint with auto-fix
|
||||
```
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
Homer is a static Vue.js 3 PWA dashboard that loads configuration from YAML files. The architecture is service-oriented with dynamic component loading.
|
||||
|
||||
### Core Application Structure
|
||||
|
||||
- **Entry Point**: `src/main.js` mounts the Vue app
|
||||
- **Root Component**: `src/App.vue` handles layout, configuration loading, and routing
|
||||
- **Configuration System**: YAML-based with runtime merging of defaults (`src/assets/defaults.yml`) and user config (`/assets/config.yml`)
|
||||
- **Service Components**: 53 specialized integrations in `src/components/services/` that extend a Generic component pattern
|
||||
|
||||
### Service Integration Pattern
|
||||
|
||||
All service components follow this architecture:
|
||||
|
||||
- Extend `Generic.vue` using Vue slots (`<template #indicator>`, `<template #content>`, `<template #icon>`)
|
||||
- Use the `service.js` mixin (`src/mixins/service.js`) for common API functionality
|
||||
- Use a custom `fetch` method provided by the service mixin to seamlessly support proxy configuration, custom headers, and credentials.
|
||||
|
||||
### Auto-Update Configuration
|
||||
|
||||
Services support automatic data refreshing using a centralized scheduler system with global and per-service configuration:
|
||||
|
||||
#### Global Configuration
|
||||
|
||||
`autoUpdate: 30000` - Set default interval for all services (30 seconds)
|
||||
|
||||
#### Service Configuration
|
||||
- **Service-specific interval**: `updateInterval: 10000` - Override global default
|
||||
- **Disable per service**: `autoUpdateInterval: false` - Disable for specific service
|
||||
- **Use global default**: Omit `autoUpdateInterval` to use global setting
|
||||
|
||||
### Configuration & Routing
|
||||
|
||||
- **Multi-page Support**: Hash-based routing without Vue Router
|
||||
- **Dynamic Config Loading**: External URLs supported via `config.remote_config`
|
||||
- **Theme System**: CSS layers architecture with three built-in themes in `src/assets/themes/`
|
||||
- **Asset Management**: Static files served from `/assets/` with runtime configuration merging
|
||||
|
||||
### Build System Details
|
||||
|
||||
- **Vite 7**: Modern build tool with Vue plugin
|
||||
- **PWA**: Auto-updating service worker via `vite-plugin-pwa`
|
||||
- **SCSS**: Bulma framework with modular component styling
|
||||
- **Docker**: Multi-stage build (Node.js → Alpine + Lighttpd)
|
||||
|
||||
### Mock Data Creation Pattern
|
||||
|
||||
When creating mock data for service components testing:
|
||||
|
||||
**Structure**: `dummy-data/[component-name]/[api-path]/[endpoint]`
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. **Analyze component**: Read the Vue component file to identify API calls (look for `this.fetch()` calls)
|
||||
2. **Check existing mock**: If mock directory exists, read existing files to check for missing fields
|
||||
3. **Create/update structure**: `mkdir -p dummy-data/[lowercase-component-name]/` and mirror API endpoint paths
|
||||
4. **Create/update JSON files**: Write realistic mock responses matching the expected data structure
|
||||
5. **Verify fields**: Ensure all fields used in the component's computed properties and templates are included
|
||||
6. **Update existing mocks**: If mock files exist but are missing fields, add the missing fields without removing existing data
|
||||
|
||||
**Key Points**:
|
||||
|
||||
- Component directory name should be lowercase version of component name (e.g., `AdGuardHome.vue` → `adguardhome/`)
|
||||
- Directory structure mirrors API endpoints exactly
|
||||
- Files contain JSON responses (no file extension needed)
|
||||
- Mock server serves from `dummy-data/` via `pnpm mock` command
|
||||
- Each component gets isolated directory to prevent API path conflicts
|
||||
- When updating existing mocks, preserve existing data and only add missing fields required by the component
|
||||
- Always read existing mock files first to understand current structure before making changes
|
||||
|
||||
**Example**: For `AdGuardHome.vue`:
|
||||
- API calls: `/control/status`, `/control/stats`
|
||||
- Mock files: `dummy-data/adguardhome/control/status`, `dummy-data/adguardhome/control/stats`
|
||||
|
||||
### Development Notes
|
||||
|
||||
- Use `pnpm mock` to test service integrations with dummy data
|
||||
- Configuration changes require restart in development mode
|
||||
- New service components should follow the Generic component slot pattern
|
||||
- Themes use CSS custom properties for dynamic color switching
|
||||
- The app has no backend dependencies and generates static files only
|
||||
|
|
@ -6,10 +6,10 @@ First off, thank you for considering contributing to Homer!
|
|||
|
||||
### Project philosophy
|
||||
|
||||
Homer is meant to be a light and very simple dashboard that keeps all your useful utilities at hands. The few features implemented in Homer focus on
|
||||
UX and usability. If you are looking for a full featured dashboard, there is tons of great stuff out there like https://heimdall.site/, https://github.com/rmountjoy92/DashMachine or https://organizr.app/.
|
||||
Homer is meant to be a light and very simple dashboard that keeps all your useful utilities at hand. The few features implemented in Homer focus on
|
||||
UX and usability. If you are looking for a full featured dashboard, there are tons of great stuff out there like https://gethomepage.dev/, https://heimdall.site/, https://github.com/rmountjoy92/DashMachine or https://organizr.app/.
|
||||
|
||||
- Configuration is stored in a simple config file, avoiding the need for a backend/database while making possible to use versioning or [config template](https://docs.ansible.com/ansible/latest/user_guide/playbooks_templating.html).
|
||||
- Configuration is stored in a simple config file, avoiding the need for a backend/database while making it possible to use versioning or [config template](https://docs.ansible.com/ansible/latest/user_guide/playbooks_templating.html).
|
||||
- Only modern browsers are supported, feel free to use any JS features without any polyfill as soon as the latest version of the major browsers supports them.
|
||||
|
||||
|
||||
|
|
@ -33,10 +33,19 @@ For all contributions, please respect the following guidelines:
|
|||
If you want to add a feature, it's often best to talk about it before starting to work on it and submitting a pull request. It's not mandatory at all, but
|
||||
feel free to open an issue to present your idea.
|
||||
|
||||
### Working with AI Agents
|
||||
|
||||
This repository include an [`AGENTS.md`](https://github.com/bastienwirtz/homer/blob/main/AGENTS.md) instruction file for agents. It use an [open format](https://agents.md/), which most agent should natively use for context. However, for specific agent like Claude Code or Gemini, you will have to specifically ask it to read the file or create symlink:
|
||||
|
||||
```sh
|
||||
ln -s AGENTS.md CLAUDE.md
|
||||
ln -s AGENTS.md GEMINI.md
|
||||
```
|
||||
|
||||
### How to submit a contribution
|
||||
|
||||
The general process to submit a contribution is as follow:
|
||||
1. Take a look to the [development guideline](https://github.com/bastienwirtz/homer/blob/main/docs/development.md).
|
||||
1. Take a look at the [development guideline](https://github.com/bastienwirtz/homer/blob/main/docs/development.md).
|
||||
2. Create your own fork of the code
|
||||
3. Do the changes in your fork
|
||||
4. Make sure to fill the [pull request description](https://github.com/bastienwirtz/homer/blob/main/.github/PULL_REQUEST_TEMPLATE.md) properly.
|
||||
|
|
|
|||
59
Dockerfile
59
Dockerfile
|
|
@ -1,33 +1,58 @@
|
|||
# build stage
|
||||
FROM node:lts-alpine as build-stage
|
||||
FROM --platform=$BUILDPLATFORM node:24-alpine3.23 AS build-stage
|
||||
|
||||
ENV PNPM_HOME="/pnpm"
|
||||
ENV PATH="$PNPM_HOME:$PATH"
|
||||
|
||||
RUN corepack enable && corepack use pnpm@10
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package*.json ./
|
||||
RUN yarn install --frozen-lockfile
|
||||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
COPY . .
|
||||
RUN yarn build
|
||||
RUN pnpm build
|
||||
|
||||
# production stage
|
||||
FROM alpine:3.15
|
||||
FROM alpine:3.23
|
||||
|
||||
ENV USER darkhttpd
|
||||
ENV GROUP darkhttpd
|
||||
ENV GID 911
|
||||
ENV UID 911
|
||||
ENV PORT 8080
|
||||
ARG VERSION_TAG=latest
|
||||
|
||||
RUN addgroup -S ${GROUP} -g ${GID} && adduser -D -S -u ${UID} ${USER} ${GROUP} && \
|
||||
apk add -U --no-cache su-exec darkhttpd
|
||||
LABEL \
|
||||
org.label-schema.schema-version="1.0" \
|
||||
org.label-schema.version="$VERSION_TAG" \
|
||||
org.opencontainers.image.title="Homer Image" \
|
||||
org.opencontainers.image.description="A dead simple static Home-Page for your server to keep your services on hand, from a simple yaml configuration file." \
|
||||
org.opencontainers.image.ref.name="b4bz/homer:${VERSION_TAG}" \
|
||||
org.opencontainers.image.version="$VERSION_TAG" \
|
||||
org.opencontainers.image.licenses="Apache-2.0 license" \
|
||||
org.opencontainers.image.source="https://github.com/bastienwirtz/homer" \
|
||||
org.opencontainers.image.url="https://hub.docker.com/r/b4bz/homer"
|
||||
|
||||
COPY --from=build-stage --chown=${USER}:${GROUP} /app/dist /www/
|
||||
COPY --from=build-stage --chown=${USER}:${GROUP} /app/dist/assets /www/default-assets
|
||||
ENV GID=1000 \
|
||||
UID=1000 \
|
||||
PORT=8080 \
|
||||
SUBFOLDER="/_" \
|
||||
INIT_ASSETS=1 \
|
||||
IPV6_DISABLE=0
|
||||
|
||||
RUN addgroup -S lighttpd -g ${GID} && adduser -D -S -u ${UID} lighttpd lighttpd && \
|
||||
apk add -U --no-cache tzdata lighttpd
|
||||
|
||||
WORKDIR /www
|
||||
|
||||
COPY lighttpd.conf /lighttpd.conf
|
||||
COPY lighttpd-ipv6.sh /etc/lighttpd/ipv6.sh
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
COPY --from=build-stage --chown=${UID}:${GID} /app/dist /www/
|
||||
COPY --from=build-stage --chown=${UID}:${GID} /app/dist/assets /www/default-assets
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
|
||||
CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:${PORT}/ || exit 1
|
||||
USER ${UID}:${GID}
|
||||
|
||||
HEALTHCHECK --start-period=10s --start-interval=1s --interval=30s --timeout=5s --retries=3 \
|
||||
CMD wget --no-verbose -Y off --tries=1 --spider http://127.0.0.1:${PORT}/ || exit 1
|
||||
|
||||
EXPOSE ${PORT}
|
||||
VOLUME /www/assets
|
||||
|
||||
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
|
||||
|
|
|
|||
|
|
@ -1,43 +0,0 @@
|
|||
# build stage
|
||||
FROM node:lts-alpine as build-stage
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package*.json ./
|
||||
RUN yarn install --frozen-lockfile
|
||||
|
||||
COPY . .
|
||||
RUN yarn build
|
||||
|
||||
# Multi arch build support
|
||||
FROM alpine as qemu
|
||||
|
||||
ARG QEMU_VERSION="v4.2.0-7"
|
||||
|
||||
RUN wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-arm-static && chmod +x qemu-arm-static
|
||||
|
||||
# production stage
|
||||
FROM arm32v7/alpine:3.11
|
||||
|
||||
COPY --from=qemu qemu-arm-static /usr/bin/
|
||||
|
||||
ENV USER darkhttpd
|
||||
ENV GROUP darkhttpd
|
||||
ENV GID 911
|
||||
ENV UID 911
|
||||
ENV PORT 8080
|
||||
|
||||
RUN addgroup -S ${GROUP} -g ${GID} && adduser -D -S -u ${UID} ${USER} ${GROUP} && \
|
||||
apk add -U --no-cache darkhttpd su-exec && \
|
||||
rm /usr/bin/qemu-arm-static
|
||||
|
||||
COPY --from=build-stage --chown=${USER}:${GROUP} /app/dist /www/
|
||||
COPY --from=build-stage --chown=${USER}:${GROUP} /app/dist/assets /www/default-assets
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
|
||||
CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:${PORT}/ || exit 1
|
||||
|
||||
EXPOSE ${PORT}
|
||||
VOLUME /www/assets
|
||||
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
# build stage
|
||||
FROM node:lts-alpine as build-stage
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package*.json ./
|
||||
RUN yarn install --frozen-lockfile
|
||||
|
||||
COPY . .
|
||||
RUN yarn build
|
||||
|
||||
# Multi arch build support
|
||||
FROM alpine as qemu
|
||||
|
||||
ARG QEMU_VERSION="v4.2.0-7"
|
||||
|
||||
RUN wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-aarch64-static && chmod +x qemu-aarch64-static
|
||||
|
||||
# production stage
|
||||
FROM arm64v8/alpine:3.11
|
||||
|
||||
COPY --from=qemu qemu-aarch64-static /usr/bin/
|
||||
|
||||
ENV USER darkhttpd
|
||||
ENV GROUP darkhttpd
|
||||
ENV GID 911
|
||||
ENV UID 911
|
||||
ENV PORT 8080
|
||||
|
||||
RUN addgroup -S ${GROUP} -g ${GID} && adduser -D -S -u ${UID} ${USER} ${GROUP} && \
|
||||
apk add -U --no-cache darkhttpd su-exec && \
|
||||
rm /usr/bin/qemu-aarch64-static
|
||||
|
||||
COPY --from=build-stage --chown=${USER}:${GROUP} /app/dist /www/
|
||||
COPY --from=build-stage --chown=${USER}:${GROUP} /app/dist/assets /www/default-assets
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
|
||||
CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:${PORT}/ || exit 1
|
||||
|
||||
EXPOSE ${PORT}
|
||||
VOLUME /www/assets
|
||||
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
|
||||
136
README.md
136
README.md
|
|
@ -10,105 +10,116 @@
|
|||
<h4 align="center">
|
||||
A dead simple static <strong>HOM</strong>epage for your serv<strong>ER</strong> to keep your services on hand, from a simple <code>yaml</code> configuration file.
|
||||
</h4>
|
||||
|
||||
<p align="center">
|
||||
<strong>
|
||||
<a href="https://homer-demo.netlify.app">Demo</a>
|
||||
•
|
||||
<a href="https://gitter.im/homer-dashboard/community">Chat</a>
|
||||
•
|
||||
<a href="#getting-started">Getting started</a>
|
||||
</strong>
|
||||
</p>
|
||||
<a href="https://www.buymeacoffee.com/bastien" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-yellow.png" alt="Buy Me A Coffee" height="41" width="174"></a>
|
||||
<p>
|
||||
<p align="center">
|
||||
<a href="https://opensource.org/licenses/Apache-2.0"><img
|
||||
alt="License: Apache 2"
|
||||
src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a>
|
||||
<a href="https://gitter.im/homer-dashboard/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge"><img
|
||||
alt="Gitter chat"
|
||||
src="https://badges.gitter.im/homer-dashboard/community.svg"></a>
|
||||
<a href="https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip"><img
|
||||
alt="Download homer static build"
|
||||
src="https://img.shields.io/badge/Download-homer.zip-orange"></a>
|
||||
<a href="https://twitter.com/acdlite/status/974390255393505280"><img
|
||||
alt="speed-blazing"
|
||||
src="https://img.shields.io/badge/speed-blazing%20%F0%9F%94%A5-red"></a>
|
||||
<a href="https://github.com/awesome-selfhosted/awesome-selfhosted"><img
|
||||
alt="Awesome"
|
||||
src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://raw.github.com/bastienwirtz/homer/main/docs/screenshot.png" width="100%">
|
||||
<strong>
|
||||
<a href="https://homer-demo.netlify.app">Demo</a>
|
||||
•
|
||||
<a href="https://hub.docker.com/r/b4bz/homer">Docker Hub</a>
|
||||
•
|
||||
<a href="#get-started">Get started</a>
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
## Highlights
|
||||
|
||||
- ⚡️ Lightweight & Fast
|
||||
- 🥱 Low / No maintenance
|
||||
- 📄 Simple [yaml](http://yaml.org/) file configuration
|
||||
- ➕ Installable (pwa)
|
||||
- 🧠 Smart cards
|
||||
- 🔍️ Fuzzy search
|
||||
- 📂 Multi pages & item grouping
|
||||
- 🎨 Theme customization
|
||||
- ⌨️ keyboard shortcuts:
|
||||
- <kbd>/</kbd> Start searching.
|
||||
- <kbd>Escape</kbd> Stop searching.
|
||||
- <kbd>Enter</kbd> Open the first matching result (respects the bookmark's `_target` property).
|
||||
- <kbd>Alt</kbd> (or <kbd>Option</kbd>) + <kbd>Enter</kbd> Open the first matching result in a new tab.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Features](#features)
|
||||
- [Getting started](#getting-started)
|
||||
- [Getting started](#get-started)
|
||||
- [Kubernetes Installation](docs/kubernetes.md)
|
||||
- [Configuration](docs/configuration.md)
|
||||
- [Custom services](docs/customservices.md)
|
||||
- [Theming](docs/theming.md)
|
||||
- [Smart cards](docs/customservices.md)
|
||||
- [Tips & tricks](docs/tips-and-tricks.md)
|
||||
- [Development](docs/development.md)
|
||||
- [Troubleshooting](docs/troubleshooting.md)
|
||||
|
||||
## Features
|
||||
## Get started
|
||||
|
||||
- [yaml](http://yaml.org/) file configuration
|
||||
- Installable (pwa)
|
||||
- Search
|
||||
- Grouping
|
||||
- Theme customization
|
||||
- Offline health check
|
||||
- keyboard shortcuts:
|
||||
- `/` Start searching.
|
||||
- `Escape` Stop searching.
|
||||
- `Enter` Open the first matching result (respects the bookmark's `_target` property).
|
||||
- `Alt`/`Option` + `Enter` Open the first matching result in a new tab.
|
||||
Homer is a full static html/js dashboard, based on a simple yaml configuration file. See [documentation](docs/configuration.md) for information about the configuration (`assets/config.yml`) options.
|
||||
|
||||
## Getting started
|
||||
|
||||
Homer is a full static html/js dashboard, generated from the source in `/src` using webpack. It's meant to be served by an HTTP server, **it will not work if you open dist/index.html directly over file:// protocol**.
|
||||
|
||||
See [documentation](docs/configuration.md) for information about the configuration (`assets/config.yml`) options.
|
||||
It's meant to be served by an HTTP server, **it will not work if you open the index.html directly over file:// protocol**.
|
||||
|
||||
### Using docker
|
||||
|
||||
To launch container:
|
||||
The configuration directory is bind mounted to make your dashboard easy to maintain.
|
||||
|
||||
**Start the container with `docker run`**
|
||||
|
||||
```sh
|
||||
# Make sure your local config directory exists
|
||||
docker run -d \
|
||||
--name homer \
|
||||
-p 8080:8080 \
|
||||
-v </your/local/assets/>:/www/assets \
|
||||
--restart=always \
|
||||
--mount type=bind,source="/path/to/config/dir",target=/www/assets \
|
||||
--restart=unless-stopped \
|
||||
b4bz/homer:latest
|
||||
```
|
||||
|
||||
Default assets will be automatically installed in the `/www/assets` directory. Use `UID` and/or `GID` env var to change the assets owner (`docker run -e "UID=1000" -e "GID=1000" [...]`).
|
||||
> [!NOTE]
|
||||
> The container will run using a user uid and gid 1000 by default, add `--user <your-UID>:<your-GID>` to the docker command to adjust it if necessary. Make sure this match the permissions of your assets directory.
|
||||
|
||||
### Using docker-compose
|
||||
|
||||
The `docker-compose.yml` file must be edited to match your needs.
|
||||
Set the port and volume (equivalent to `-p` and `-v` arguments):
|
||||
**or `docker-compose`**
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
- /your/local/assets/:/www/assets
|
||||
ports:
|
||||
- 8080:8080
|
||||
services:
|
||||
homer:
|
||||
image: b4bz/homer
|
||||
container_name: homer
|
||||
volumes:
|
||||
- /path/to/config/dir:/www/assets # Make sure your local config directory exists
|
||||
ports:
|
||||
- 8080:8080
|
||||
user: 1000:1000 # default
|
||||
environment:
|
||||
- INIT_ASSETS=1 # default, requires the config directory to be writable for the container user (see user option)
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
To launch container:
|
||||
**Environment variables:**
|
||||
|
||||
```sh
|
||||
cd /path/to/docker-compose.yml
|
||||
docker-compose up -d
|
||||
```
|
||||
- **`INIT_ASSETS`** (default: `1`)
|
||||
Install example configuration file & assets (favicons, ...) to help you get started.
|
||||
|
||||
Default assets will be automatically installed in the `/www/assets` directory. Use `UID` and/or `GID` env var to change the assets owner, also in `docker-compose.yml`:
|
||||
- **`SUBFOLDER`** (default: `null`)
|
||||
If you would like to host Homer in a subfolder, (ex: *<http://my-domain/homer>*), set this to the subfolder path (ex `/homer`).
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- UID=1000
|
||||
- GID=1000
|
||||
```
|
||||
- **`PORT`** (default: `8080`)
|
||||
If you would like to change internal port of Homer from default `8080` to your port choice.
|
||||
|
||||
- **`IPV6_DISABLE`** (default: 0)
|
||||
Set to `1` to disable listening on IPv6.
|
||||
|
||||
### Using the release tarball (prebuilt, ready to use)
|
||||
|
||||
|
|
@ -116,22 +127,17 @@ Download and extract the latest release (`homer.zip`) from the [release page](ht
|
|||
|
||||
```sh
|
||||
wget https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip
|
||||
unzip homer.zip
|
||||
unzip homer.zip -d homer
|
||||
cd homer
|
||||
cp assets/config.yml.dist assets/config.yml
|
||||
npx serve # or python -m http.server 8010 or apache, nginx ...
|
||||
pnpx http-server # or python -m http.server 8010 or any web server.
|
||||
```
|
||||
|
||||
### Build manually
|
||||
|
||||
```sh
|
||||
# Using yarn (recommended)
|
||||
yarn install
|
||||
yarn build
|
||||
|
||||
# **OR** Using npm
|
||||
npm install
|
||||
npm run build
|
||||
pnpm install
|
||||
pnpm build
|
||||
```
|
||||
|
||||
Then your dashboard is ready to use in the `/dist` directory.
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = {
|
||||
presets: ["@vue/cli-plugin-babel/preset"],
|
||||
};
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
---
|
||||
version: "2"
|
||||
services:
|
||||
homer:
|
||||
image: b4bz/homer
|
||||
#To build from source, comment previous line and uncomment below
|
||||
#build: .
|
||||
container_name: homer
|
||||
volumes:
|
||||
- /your/local/assets/:/www/assets
|
||||
ports:
|
||||
- 8080:8080
|
||||
#environment:
|
||||
# - UID=1000
|
||||
# - GID=1000
|
||||
restart: unless-stopped
|
||||
|
|
@ -1,11 +1,18 @@
|
|||
# Configuration
|
||||
|
||||
Title, icons, links, colors, and services can be configured in the `config.yml` file (located in `/assets` directory once built, or in the `public/assets` directory in development mode), using [yaml](http://yaml.org/) format.
|
||||
Homer relies on a single [yaml](http://yaml.org/) configuration file, located in the `/assets` directory.
|
||||
`.dist` sample configuration files are available to help you get started. Alternatively, the example below can be
|
||||
copied into the config file.
|
||||
|
||||
> [!NOTE]
|
||||
> On docker installations, the sample configuration is automatically installed when no configuration is found **if**
|
||||
> the configuration directory is writable to the docker user. If no configuration has been installed, check your
|
||||
> container logs and your mounted configuration directory ownership & permissions
|
||||
|
||||
```yaml
|
||||
---
|
||||
# Homepage configuration
|
||||
# See https://fontawesome.com/v5/search for icons options
|
||||
# See https://fontawesome.com/search for icons options
|
||||
|
||||
# Optional: Use external configuration file.
|
||||
# Using this will ignore remaining config in this file
|
||||
|
|
@ -25,11 +32,16 @@ header: true # Set to false to hide the header
|
|||
footer: '<p>Created with <span class="has-text-danger">❤️</span> with <a href="https://bulma.io/">bulma</a>, <a href="https://vuejs.org/">vuejs</a> & <a href="https://fontawesome.com/">font awesome</a> // Fork me on <a href="https://github.com/bastienwirtz/homer"><i class="fab fa-github-alt"></i></a></p>' # set false if you want to hide it.
|
||||
|
||||
columns: "3" # "auto" or number (must be a factor of 12: 1, 2, 3, 4, 6, 12)
|
||||
connectivityCheck: true # whether you want to display a message when the apps are not accessible anymore (VPN disconnected for example)
|
||||
connectivityCheck: true # whether you want to display a message when the apps are not accessible anymore (VPN disconnected for example).
|
||||
# You should set it to true when using an authentication proxy, it also reloads the page when a redirection is detected when checking connectivity.
|
||||
|
||||
# Optional: Proxy / hosting option
|
||||
proxy:
|
||||
useCredentials: false # send cookies & authorization headers when fetching service specific data. Set to `true` if you use an authentication proxy. Can be overrided on service level.
|
||||
headers: # send custom headers when fetching service specific data. Can also be set on a service level.
|
||||
Test: "Example"
|
||||
Test1: "Example1"
|
||||
|
||||
|
||||
# Set the default layout and color scheme
|
||||
defaults:
|
||||
|
|
@ -61,7 +73,7 @@ colors:
|
|||
card-shadow: rgba(0, 0, 0, 0.1)
|
||||
link: "#3273dc"
|
||||
link-hover: "#363636"
|
||||
background-image: "assets/your/light/bg.png"
|
||||
background-image: "/assets/your/light/bg.png" # prefix with your sub subpath if any (ex: /homer/assets/...)
|
||||
dark:
|
||||
highlight-primary: "#3367d6"
|
||||
highlight-secondary: "#4285f4"
|
||||
|
|
@ -75,7 +87,7 @@ colors:
|
|||
card-shadow: rgba(0, 0, 0, 0.4)
|
||||
link: "#3273dc"
|
||||
link-hover: "#ffdd57"
|
||||
background-image: "assets/your/dark/bg.png"
|
||||
background-image: "/assets/your/dark/bg.png" # prefix with your sub subpath if any (ex: /homer/assets/...)
|
||||
|
||||
# Optional message
|
||||
message:
|
||||
|
|
@ -94,6 +106,7 @@ message:
|
|||
style: "is-warning"
|
||||
title: "Optional message!"
|
||||
icon: "fa fa-exclamation-triangle"
|
||||
# The content also accepts HTML content, so you can add divs, images or whatever you want to make match your needs.
|
||||
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
|
||||
|
||||
# Optional navbar
|
||||
|
|
@ -112,6 +125,9 @@ links:
|
|||
icon: "fas fa-file-alt"
|
||||
url: "#page2"
|
||||
|
||||
# Optional: enable periodic refresh for all smart cards that implements it (unless overriden at service configuration level).
|
||||
updateIntervalMs: 30000 # interval in milliseconds, minimum is 1000 (1s). Remove or set to 0 to disable. Can be overriden at service level. (default disabled)
|
||||
|
||||
# Services
|
||||
# First level array represents a group.
|
||||
# Leave only a "items" key if not using group (group name, icon & tagstyle are optional, section separation will not be displayed).
|
||||
|
|
@ -120,6 +136,7 @@ services:
|
|||
icon: "fas fa-code-branch"
|
||||
# A path to an image can also be provided. Note that icon take precedence if both icon and logo are set.
|
||||
# logo: "path/to/logo"
|
||||
# class: "highlight-purple" # Optional css class to add on the service group.
|
||||
items:
|
||||
- name: "Awesome app"
|
||||
logo: "assets/tools/sample.png"
|
||||
|
|
@ -127,6 +144,7 @@ services:
|
|||
# icon: "fab fa-jenkins"
|
||||
subtitle: "Bookmark example"
|
||||
tag: "app"
|
||||
keywords: "self hosted reddit" # optional keyword used for searching purpose
|
||||
url: "https://www.reddit.com/r/selfhosted/"
|
||||
target: "_blank" # optional html tag target attribute
|
||||
- name: "Another one"
|
||||
|
|
@ -150,7 +168,7 @@ services:
|
|||
# background: red # optional color for card to set color directly without custom stylesheet
|
||||
```
|
||||
|
||||
View [Custom Services](customservices.md) for details about all available custom services (like PiHole) and how to configure them.
|
||||
View **[smart cards](customservices.md)** for details about all available cards (like `PiHole`) and how to configure them.
|
||||
|
||||
If you choose to fetch message information from an endpoint, the output format should be as follows (or you can [custom map fields as shown in tips-and-tricks](./tips-and-tricks.md#mapping-fields)):
|
||||
|
||||
|
|
@ -165,40 +183,37 @@ If you choose to fetch message information from an endpoint, the output format s
|
|||
`null` value or missing keys will be ignored and value from the `config.yml` will be used if available.
|
||||
Empty values (either in `config.yml` or the endpoint data) will hide the element (ex: set `"title": ""` to hide the title bar).
|
||||
|
||||
## Connectivity checks
|
||||
|
||||
As a webapp (PWA) the dashboard can still be displayed when your homer server is offline.
|
||||
The connectivity checker periodically sends a HEAD request bypassing the PWA cache to the dashboard page to make sure it's still reachable.
|
||||
|
||||
It can be useful when you access your dashboard through a VPN or ssh tunnel for example, to know if your connection is up. It also helps when using an authentication proxy, it will reload the page if the authentication expires (when a redirect is send in response to the HEAD request).
|
||||
|
||||
## Style Options
|
||||
|
||||
Homer uses [bulma CSS](https://bulma.io/), which provides a [modifiers syntax](https://bulma.io/documentation/modifiers/syntax/). You'll notice in the config there is a `tagstyle` option. It can be set to any of the bulma modifiers. You'll probably want to use one of these 4 main colors:
|
||||
Homer uses [bulma CSS](https://bulma.io/), which provides a [modifiers syntax](https://bulma.io/documentation/start/syntax/). You'll notice in the config there is a `tagstyle` option. It can be set to any of the bulma modifiers. You'll probably want to use one of these 4 main colors:
|
||||
|
||||
- `is-info` (blue)
|
||||
- `is-success` (green)
|
||||
- `is-warning` (yellow)
|
||||
- `is-danger` (red)
|
||||
|
||||
You can read the [bulma modifiers page](https://bulma.io/documentation/modifiers/syntax/) for other options regarding size, style, or state.
|
||||
You can read the [bulma modifiers page](https://bulma.io/documentation/start/syntax/) for other options regarding size, style, or state.
|
||||
|
||||
## Theming & customization
|
||||
|
||||
See `colors` settings in the configuration example above.
|
||||
Favicon and application icon (pwa) are located in the `assets/icons` directory and can be replaced by any image you want (just keep the same name & size).
|
||||
The `/assets/manifest.json` can also be edited to change the app (pwa) name, description and other settings.
|
||||
|
||||
### Community theme
|
||||
|
||||
- [Catppuccin theme](https://github.com/mrpbennett/catppucin-homer) by [@mrpbenett](https://github.com/mrpbennett)
|
||||
- [DietPi theme](https://codeberg.org/Cs137/homer-theme-dietpi) by [@Cs137](https://codeberg.org/Cs137)
|
||||
- [Dracula theme](https://draculatheme.com/homer) by [@Tuetenk0pp](https://github.com/Tuetenk0pp)
|
||||
- [Homer Theme v2](https://github.com/walkxcode/homer-theme) by [@walkxcode](https://github.com/walkxcode)
|
||||
|
||||
## PWA Icons
|
||||
|
||||
In order to easily generate all required icon preset for the PWA to work, a tool like [vue-pwa-asset-generator](https://www.npmjs.com/package/vue-pwa-asset-generator) can be used:
|
||||
|
||||
```bash
|
||||
npx vue-pwa-asset-generator -a {your_512x512_source_png} -o {your_output_folder}
|
||||
```
|
||||
|
||||
## Supported services
|
||||
|
||||
Currently the following services are supported for showing quick infos on the card. They can be used by setting the type to one of the following values at the item.
|
||||
|
||||
- PiHole
|
||||
- AdGuardHome
|
||||
- PaperlessNG
|
||||
- Mealie
|
||||
|
||||
## Additional configuration
|
||||
|
||||
### Paperless
|
||||
|
||||
For Paperless you need an API-Key which you have to store at the item in the field `apikey`.
|
||||
|
||||
### Mealie
|
||||
|
||||
First off make sure to remove an existing `subtitle` as it will take precedence if set. Setting `type: "Mealie"` will then show the number of recipes Mealie is keeping organized or the planned meal for today if one is planned. You will have to set an API key in the field `apikey` which can be created in your Mealie installation.
|
||||
See icons documentation [here](https://github.com/bastienwirtz/homer/blob/main/public/assets/icons/README.md).
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -3,13 +3,8 @@
|
|||
If you want to contribute to Homer, please read the [contributing guidelines](https://github.com/bastienwirtz/homer/blob/main/CONTRIBUTING.md) first.
|
||||
|
||||
```sh
|
||||
# Using yarn (recommended)
|
||||
yarn install
|
||||
yarn serve
|
||||
|
||||
# **OR** Using npm
|
||||
npm install
|
||||
npm run serve
|
||||
pnpm install
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
## Custom services
|
||||
|
|
@ -24,6 +19,7 @@ Each one is **optional**, and will display the usual information if omitted.
|
|||
Each service must implement the `item` [property](https://vuejs.org/v2/guide/components-props.html) and bind it the Generic component if used.
|
||||
|
||||
### Skeleton
|
||||
|
||||
```Vue
|
||||
<template>
|
||||
<Generic :item="item">
|
||||
|
|
@ -54,7 +50,6 @@ export default {
|
|||
</script>
|
||||
```
|
||||
|
||||
|
||||
## Themes
|
||||
|
||||
Themes are meant to be simple customization (written in [scss](https://sass-lang.com/documentation/syntax)).
|
||||
|
|
|
|||
83
docs/kubernetes.md
Normal file
83
docs/kubernetes.md
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
# Kubernetes Installation
|
||||
|
||||
We have different solution to install Homer on Kubernetes Cluster, each solution responds to a specific need.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Helm Chart](#helm-chart)
|
||||
- [Controller With CRDs](#controller-crds)
|
||||
- [Controller With Ingress Annotations](#controller-annotations)
|
||||
- [Operator](#Operator)
|
||||
|
||||
## Helm Chart
|
||||
|
||||
To deploy Homer in Kubernetes
|
||||
|
||||
Thanks to [@djjudas21](https://github.com/djjudas21) [charts](https://github.com/djjudas21/charts/tree/main/charts/homer):
|
||||
|
||||
### Installation
|
||||
|
||||
```sh
|
||||
helm repo add djjudas21 https://djjudas21.github.io/charts/
|
||||
helm repo update djjudas21
|
||||
|
||||
# install with all defaults
|
||||
helm install homer djjudas21/homer
|
||||
|
||||
# install with customisations
|
||||
wget https://raw.githubusercontent.com/djjudas21/charts/main/charts/homer/values.yaml
|
||||
# edit values.yaml
|
||||
helm install homer djjudas21/homer -f values.yaml
|
||||
```
|
||||
|
||||
## Controller CRDs
|
||||
|
||||
To deploy Homer in Kubernetes with [Custom Resources Definition](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) to dynamic declaration for Homer Service
|
||||
|
||||
Thanks to [@jplanckeel](https://github.com/jplanckeel) [homer-k8s](https://github.com/bananaops/homer-k8s/tree/main/):
|
||||
|
||||
### Installation
|
||||
|
||||
```sh
|
||||
helm repo add bananaops https://bananaops.github.io/homer-k8s/
|
||||
helm repo update bananaops
|
||||
|
||||
# install with all defaults
|
||||
helm install homer bananaops/homer-k8s
|
||||
|
||||
# install with customisations
|
||||
wget https://raw.githubusercontent.com/bananaops/homer-k8s/main/helm/homer-k8s/values.yaml
|
||||
# edit values.yaml
|
||||
helm install homer bananaops/homer-k8s -f values.yaml
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
- [usage](https://github.com/bananaops/homer-k8s/tree/main/?tab=readme-ov-file#crds-homerservices)
|
||||
|
||||
## Controller Annotations
|
||||
|
||||
To deploy Homer in Kubernetes with controller to check ingress annotation and modify homer configuration
|
||||
|
||||
Thanks to [@paulfantom](https://github.com/paulfantom) [homer-reloader](https://github.com/paulfantom/homer-reloader/tree/main/):
|
||||
|
||||
|
||||
## Operator
|
||||
|
||||
To deploy many Homer in Kubernetes with [Custom Resources Definition](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
|
||||
|
||||
Thanks to [@rajsinghtech](https://github.com/rajsinghtech) [homer-operator](https://github.com/rajsinghtech/homer-operator/tree/main/):
|
||||
|
||||
|
||||
### Installation
|
||||
|
||||
```sh
|
||||
# install with customisations
|
||||
wget https://raw.githubusercontent.com/rajsinghtech/homer-operator/main/deploy/operator.yaml
|
||||
# Apply operator file
|
||||
kubectl apply -f operator.yaml
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
- [usage](https://github.com/rajsinghtech/homer-operator?tab=readme-ov-file#usage)
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 50 KiB |
94
docs/theming.md
Normal file
94
docs/theming.md
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
# Theming
|
||||
|
||||
## Change theme
|
||||
|
||||
The default theme can be changed using the yaml configuration file
|
||||
|
||||
```yaml
|
||||
theme: default # 'default', 'walkxcode', or 'neon' see files in 'src/assets/themes'.
|
||||
```
|
||||
|
||||
## Favicon
|
||||
|
||||
Use your own favicon by changing the icons files in the `assets/icons` directory. More information on the format [here](https://github.com/bastienwirtz/homer/blob/main/public/assets/icons/README.md).
|
||||
|
||||
## Colors and background customization
|
||||
|
||||
Default colors and background can be customized for each theme variant (light and dark), using either the yaml config file, or the css variables (see "Additional stylesheets" below).
|
||||
|
||||
### Available options
|
||||
|
||||
| yaml | css | description |
|
||||
| --------------------- | ----------------------- | --- |
|
||||
| `highlight-primary` | `--highlight-primary` | header background, group title icons |
|
||||
| `highlight-secondary` | `--highlight-secondary` | navbar background, default tag color |
|
||||
| `highlight-hover` | `--highlight-hover` | navbar links hover, search input background |
|
||||
| `background` | `--background` | page background color |
|
||||
| `card-background` | `--card-background` | service card background color |
|
||||
| `text` | `--text` | main text color |
|
||||
| `text-header` | `--text-header` | header text color |
|
||||
| `text-title` | `--text-title` | service card title color |
|
||||
| `text-subtitle` | `--text-subtitle` | service card subtitle color |
|
||||
| `card-shadow` | `--card-shadow` | Service card `box-shadow` |
|
||||
| `link` | `--link` | Links color (footer & message), service card icon color |
|
||||
| `link-hover` | `--link-hover` | Links hover color (footer & message), service card icon hover color |
|
||||
| `background-image` | `--background-image` | page background image url (when used in css, set `url(<image-url>)` instead of just the url. see example below)|
|
||||
|
||||
|
||||
YAML example
|
||||
|
||||
```yml
|
||||
colors:
|
||||
light:
|
||||
highlight-primary: "#3367d6"
|
||||
background-image: "assets/your/light/bg.webp"
|
||||
...
|
||||
dark:
|
||||
highlight-primary: "#3367d6"
|
||||
background-image: "assets/your/dark/bg.webp"
|
||||
...
|
||||
```
|
||||
|
||||
CSS example
|
||||
|
||||
```css
|
||||
.light {
|
||||
--highlight-primary: #3367d6;
|
||||
--background-image: url("assets/your/light/bg.webp");
|
||||
...
|
||||
}
|
||||
|
||||
.dark {
|
||||
--highlight-primary: #3367d6;
|
||||
--background-image: url("assets/your/dark/bg.webp");
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
## Additional stylesheets
|
||||
|
||||
One or more additional stylesheets can be loaded to add or override style from the current theme. Use the 'stylesheet' option in the yaml configuration file to load your own CSS file.
|
||||
|
||||
```yml
|
||||
stylesheet:
|
||||
- "assets/custom.css"
|
||||
```
|
||||
|
||||
### Customization example
|
||||
|
||||
#### Max width modification
|
||||
|
||||
```css
|
||||
body #main-section .container {
|
||||
max-width: 2000px; // adjust to your needs (eg: calc(100% - 100px), none, ...)
|
||||
}
|
||||
```
|
||||
|
||||
#### Background gradient
|
||||
|
||||
```css
|
||||
#app {
|
||||
height: 100%;
|
||||
background: linear-gradient(90deg, #5c2483, #0095db);
|
||||
}
|
||||
```
|
||||
|
|
@ -2,6 +2,13 @@
|
|||
|
||||
Here is a collection of neat tips and tricks that Homer users have come up with!
|
||||
|
||||
## Dashboard icons
|
||||
|
||||
Great source to find service icons
|
||||
|
||||
- <https://selfh.st/icons/>
|
||||
- <https://github.com/homarr-labs/dashboard-icons>
|
||||
|
||||
## Use Homer as a custom "new tab" page
|
||||
|
||||
#### `by @vosdev`
|
||||
|
|
@ -71,6 +78,21 @@ Then when Homer reads your config, it will substitute your anchors automatically
|
|||
The end result is that if you want to update the name or style of any particular tag, just update it once, in the tags section!
|
||||
Great if you have a lot of services or a lot of tags!
|
||||
|
||||
## YAML auto complete with a YAML schema
|
||||
|
||||
A lot of editor support auto completion, see <https://www.schemastore.org/json/>
|
||||
The homer schema is available here: <https://raw.githubusercontent.com/bastienwirtz/homer/main/.schema/config-schema.json>
|
||||
|
||||
For example with IntelliJ you can define:
|
||||
|
||||
```yaml
|
||||
# $schema: https://raw.githubusercontent.com/bastienwirtz/homer/main/.schema/config-schema.json
|
||||
```
|
||||
With VSCode you can define it like this:
|
||||
```yaml
|
||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/bastienwirtz/homer/main/.schema/config-schema.json
|
||||
```
|
||||
|
||||
## Remotely edit your config with Code Server
|
||||
|
||||
#### `by @JamiePhonic`
|
||||
|
|
@ -190,3 +212,35 @@ So, using [Node-Red](https://nodered.org/docs/getting-started/) and a quick flow
|
|||
To get started, simply import [this flow](https://flows.nodered.org/flow/4b6406c9a684c26ace0430dd1826e95d) into your Node-Red instance and change the RSS feed in the "Get News RSS Feed" node to one of your choosing!
|
||||
|
||||
So far, the flow has been tested with BBC News and Sky News, however it should be easy to modify the flow to work with other RSS feeds if they don't work out of the box!
|
||||
|
||||
## Write HTML into the dashboard
|
||||
|
||||
### Show latest camera feed
|
||||
|
||||
#### `by @matheusvellone`
|
||||
|
||||
The `message.content` config entry accepts HTML code, so you can add images.
|
||||
If you use Frigate, or have any `latest.jpg` URL for your camera, you can add it to your dashboard. You can also style the `div`/`img` tags to look nicer on your dashboard.
|
||||
|
||||
```yml
|
||||
message:
|
||||
title: Cameras
|
||||
content: >
|
||||
<div>
|
||||
<a href="http://frigate.local:5000/cameras/garage">
|
||||
<img src="http://frigate.local:5000/api/garage/latest.jpg?h=220"/>
|
||||
</a>
|
||||
<a href="http://frigate.local:5000/cameras/backyard">
|
||||
<img src="http://frigate.local:5000/api/backyard/latest.jpg?h=220"/>
|
||||
</a>
|
||||
</div>
|
||||
```
|
||||
|
||||
When using Frigate you can even add a live feed to your dashboard, like this:
|
||||
|
||||
```yml
|
||||
message:
|
||||
title: Cameras
|
||||
content: >
|
||||
<img src="http://frigate.local:5000/api/piscina"/>
|
||||
```
|
||||
|
|
@ -1,8 +1,33 @@
|
|||
# Troubleshooting
|
||||
|
||||
## My custom service card doesn't work, nothing appears or offline status is displayed (pi-hole, sonarr, ping, ...)
|
||||
## My docker container refuse to start / is stuck at restarting
|
||||
|
||||
You might by facing a [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) (Cross Origin Request Sharing) issue.
|
||||
You might be facing a permission issue. First of all, check your container logs (adjust the container name if necessary):
|
||||
|
||||
```sh
|
||||
$ docker logs homer
|
||||
[...]
|
||||
Assets directory not writable. Check assets directory permissions & docker user or skip default assets install by setting the INIT_ASSETS env var to 0
|
||||
```
|
||||
|
||||
In this case you need to make sure your mounted assets directory have the same GID / UID the container user have (default 1000:1000), and that the read and write permission is granted for the user or the group.
|
||||
|
||||
You can either:
|
||||
|
||||
- Update your assets directory permissions (ex: `chown -R 1000:1000 /your/assets/folder/`, `chmod -R u+rw /your/assets/folder/`)
|
||||
- Change the docker user by using the `--user` arguments with docker cli or `user: 1000:1000` with docker compose.
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> - **Do not** use env var to set the GID / UID of the user running container. Use the Docker `user` option.
|
||||
> - **Do not** use 0:0 as a user value, it would be a security risk, and it's not guaranty to work.
|
||||
|
||||
Check this [thread](https://github.com/bastienwirtz/homer/issues/459) for more information about debugging
|
||||
permission issues.
|
||||
|
||||
## My service card doesn't work, nothing appears or offline status is displayed (pi-hole, sonarr, ping, ...)
|
||||
|
||||
You might be facing a [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) (Cross Origin Request Sharing) issue.
|
||||
It happens when the targeted service is hosted on a different domain or port.
|
||||
Web browsers will not allow to fetch information from a different site without explicit permissions (the targeted service
|
||||
must include a special `Access-Control-Allow-Origin: *` HTTP headers).
|
||||
|
|
@ -14,6 +39,23 @@ Access to fetch at 'https://<target-service>' from origin 'https://<homer>' has
|
|||
|
||||
To resolve this, you can either:
|
||||
|
||||
* Host all your target service under the same domain & port.
|
||||
* Modify the target server configuration so that the response of the server included following header- `Access-Control-Allow-Origin: *` (<https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests>). It might be an option in the targeted service, otherwise depending on how the service is hosted, the proxy or web server can seamlessly add it.
|
||||
* Use a cors proxy server like [`cors-container`](https://github.com/imjacobclark/cors-container), [`cors-anywhere`](https://github.com/Rob--W/cors-anywhere) or many others.
|
||||
- Host all your target service under the same domain & port.
|
||||
- Modify the target server configuration so that the response of the server included following header- `Access-Control-Allow-Origin: *` (<https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests>). It might be an option in the targeted service, otherwise depending on how the service is hosted, the proxy or web server can seamlessly add it.
|
||||
- **Use a proxy** to add the necessary CORS headers (lot of options, some of them described [here](https://enable-cors.org/server.html). Also check [`CORSair`](https://github.com/bastienwirtz/corsair), a light and simple solution)
|
||||
|
||||
## I am using an authentication proxy and homer says I am offline
|
||||
|
||||
This should be a configuration issue.
|
||||
|
||||
- Make sure the option `connectivityCheck` is set to `true` in configuration.
|
||||
- Check your proxy configuration, the expected behavior is to redirect user using a 302 to the login page when user is not authenticated.
|
||||
|
||||
## I put my API key into the OpenWeather service and it still isn't working
|
||||
|
||||
If you have just made an OpenWeatherMap account and/or a newly-made API key, there is a high chance that you need to wait for it to be activated (often a few hours). If after waiting it still doesn't work, make sure to check the location you have provided since it may be an invalid location.
|
||||
|
||||
For some basic debugging steps, you can:
|
||||
|
||||
- Check with a large city such as Amsterdam as the specified location within your configuration.
|
||||
- Make sure your web browser is running the latest version of the homer configuration after updating the location (Ctrl + Shift + R).
|
||||
- Check for errors within the browser console (Ctrl + Shift + I) relating to api.openweathermap.org
|
||||
|
|
|
|||
22
dummy-data/README.md
Normal file
22
dummy-data/README.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# Dummy data
|
||||
|
||||
This directory content makes possible to test custom services cards or create a demo without actually running the service.
|
||||
The principle is simple: save a sample output of the API used in the service in a static file in this directory. The path must be identical as the service endpoint to be used seamlessly.
|
||||
|
||||
## Start the mock server to expose dummy data
|
||||
|
||||
```sh
|
||||
pnpm mock
|
||||
```
|
||||
|
||||
## How to add a new services sample
|
||||
|
||||
- create a directory for your service, and any sub-folder existing in the service api path.
|
||||
- save the api output in a file named after the service endpoint.
|
||||
|
||||
Example:
|
||||
|
||||
```sh
|
||||
mkdir pihole
|
||||
curl http://my-pihole.me/admin/api.php -o pihole/api.php # /admin is omitted because for PiHole, the implementation expect it to be in the base url (`url` or `endpoint` property)
|
||||
```
|
||||
2
dummy-data/_headers
Normal file
2
dummy-data/_headers
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
/*
|
||||
Content-Type: application/json
|
||||
51
dummy-data/adguardhome/control/stats
Normal file
51
dummy-data/adguardhome/control/stats
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"time_units": "hours",
|
||||
"num_dns_queries": 28947,
|
||||
"num_blocked_filtering": 12489,
|
||||
"num_replaced_safebrowsing": 0,
|
||||
"num_replaced_safesearch": 0,
|
||||
"num_replaced_parental": 0,
|
||||
"avg_processing_time": 0.34,
|
||||
"top_queried_domains": [
|
||||
{
|
||||
"name": "example.com",
|
||||
"count": 1289
|
||||
},
|
||||
{
|
||||
"name": "api.github.com",
|
||||
"count": 892
|
||||
}
|
||||
],
|
||||
"top_clients": [
|
||||
{
|
||||
"name": "192.168.1.100",
|
||||
"count": 8945
|
||||
},
|
||||
{
|
||||
"name": "192.168.1.101",
|
||||
"count": 6234
|
||||
}
|
||||
],
|
||||
"top_blocked_domains": [
|
||||
{
|
||||
"name": "ads.google.com",
|
||||
"count": 1245
|
||||
},
|
||||
{
|
||||
"name": "tracker.example.com",
|
||||
"count": 987
|
||||
}
|
||||
],
|
||||
"dns_queries": [
|
||||
12450, 13200, 14100, 13800, 12900, 11200, 10800, 9600, 8200, 7800,
|
||||
9200, 10500, 12100, 13600, 14800, 15200, 14900, 13700, 12800, 11900,
|
||||
11200, 10800, 10200, 9800
|
||||
],
|
||||
"blocked_filtering": [
|
||||
5200, 5800, 6100, 5900, 5400, 4800, 4600, 4200, 3600, 3400,
|
||||
4000, 4500, 5200, 5800, 6300, 6500, 6300, 5800, 5400, 5100,
|
||||
4800, 4600, 4300, 4200
|
||||
],
|
||||
"replaced_safebrowsing": [],
|
||||
"replaced_parental": []
|
||||
}
|
||||
16
dummy-data/adguardhome/control/status
Normal file
16
dummy-data/adguardhome/control/status
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"protection_enabled": true,
|
||||
"version": "v0.107.48",
|
||||
"language": "en",
|
||||
"dns_address": "127.0.0.1:53",
|
||||
"dns_port": 53,
|
||||
"protection_disabled_duration": null,
|
||||
"http_port": 80,
|
||||
"https_port": 443,
|
||||
"querylog_enabled": true,
|
||||
"querylog_size": 5000,
|
||||
"querylog_size_memory": 1000,
|
||||
"querylog_interval": 2160,
|
||||
"dhcp_available": true,
|
||||
"running": true
|
||||
}
|
||||
215
dummy-data/dockersocketproxy/containers/json
Normal file
215
dummy-data/dockersocketproxy/containers/json
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
[
|
||||
{
|
||||
"Id": "8dfafdbc3a40",
|
||||
"Names": ["/boring_feynman"],
|
||||
"Image": "nginx:latest",
|
||||
"ImageID": "sha256:f6d0b4767a6c",
|
||||
"Command": "/docker-entrypoint.sh nginx -g 'daemon off;'",
|
||||
"Created": 1640995200,
|
||||
"Ports": [
|
||||
{
|
||||
"IP": "0.0.0.0",
|
||||
"PrivatePort": 80,
|
||||
"PublicPort": 8080,
|
||||
"Type": "tcp"
|
||||
}
|
||||
],
|
||||
"Labels": {
|
||||
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
|
||||
},
|
||||
"State": "running",
|
||||
"Status": "Up 2 hours",
|
||||
"HostConfig": {
|
||||
"NetworkMode": "default"
|
||||
},
|
||||
"NetworkSettings": {
|
||||
"Networks": {
|
||||
"bridge": {
|
||||
"IPAMConfig": null,
|
||||
"Links": null,
|
||||
"Aliases": null,
|
||||
"NetworkID": "f2de39df4171",
|
||||
"EndpointID": "2cdc4edb1ded",
|
||||
"Gateway": "172.17.0.1",
|
||||
"IPAddress": "172.17.0.2",
|
||||
"IPPrefixLen": 16,
|
||||
"IPv6Gateway": "",
|
||||
"GlobalIPv6Address": "",
|
||||
"GlobalIPv6PrefixLen": 0,
|
||||
"MacAddress": "02:42:ac:11:00:02"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Mounts": []
|
||||
},
|
||||
{
|
||||
"Id": "9e87a2b84b8e",
|
||||
"Names": ["/web-app"],
|
||||
"Image": "node:16-alpine",
|
||||
"ImageID": "sha256:c85b8f829d1f",
|
||||
"Command": "npm start",
|
||||
"Created": 1640991600,
|
||||
"Ports": [
|
||||
{
|
||||
"IP": "0.0.0.0",
|
||||
"PrivatePort": 3000,
|
||||
"PublicPort": 3000,
|
||||
"Type": "tcp"
|
||||
}
|
||||
],
|
||||
"Labels": {},
|
||||
"State": "running",
|
||||
"Status": "Up 3 hours",
|
||||
"HostConfig": {
|
||||
"NetworkMode": "default"
|
||||
},
|
||||
"NetworkSettings": {
|
||||
"Networks": {
|
||||
"bridge": {
|
||||
"IPAMConfig": null,
|
||||
"Links": null,
|
||||
"Aliases": null,
|
||||
"NetworkID": "f2de39df4171",
|
||||
"EndpointID": "3edc5fdb2efe",
|
||||
"Gateway": "172.17.0.1",
|
||||
"IPAddress": "172.17.0.3",
|
||||
"IPPrefixLen": 16,
|
||||
"IPv6Gateway": "",
|
||||
"GlobalIPv6Address": "",
|
||||
"GlobalIPv6PrefixLen": 0,
|
||||
"MacAddress": "02:42:ac:11:00:03"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Mounts": [
|
||||
{
|
||||
"Type": "bind",
|
||||
"Source": "/home/user/app",
|
||||
"Destination": "/app",
|
||||
"Mode": "",
|
||||
"RW": true,
|
||||
"Propagation": "rprivate"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Id": "7b9a3c6d2e1f",
|
||||
"Names": ["/database"],
|
||||
"Image": "postgres:13",
|
||||
"ImageID": "sha256:b4ed8d5b4f3a",
|
||||
"Command": "docker-entrypoint.sh postgres",
|
||||
"Created": 1640988000,
|
||||
"Ports": [
|
||||
{
|
||||
"IP": "127.0.0.1",
|
||||
"PrivatePort": 5432,
|
||||
"PublicPort": 5432,
|
||||
"Type": "tcp"
|
||||
}
|
||||
],
|
||||
"Labels": {},
|
||||
"State": "dead",
|
||||
"Status": "Up 4 hours",
|
||||
"HostConfig": {
|
||||
"NetworkMode": "default"
|
||||
},
|
||||
"NetworkSettings": {
|
||||
"Networks": {
|
||||
"bridge": {
|
||||
"IPAMConfig": null,
|
||||
"Links": null,
|
||||
"Aliases": null,
|
||||
"NetworkID": "f2de39df4171",
|
||||
"EndpointID": "4fdc6gdb3gfg",
|
||||
"Gateway": "172.17.0.1",
|
||||
"IPAddress": "172.17.0.4",
|
||||
"IPPrefixLen": 16,
|
||||
"IPv6Gateway": "",
|
||||
"GlobalIPv6Address": "",
|
||||
"GlobalIPv6PrefixLen": 0,
|
||||
"MacAddress": "02:42:ac:11:00:04"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Mounts": [
|
||||
{
|
||||
"Type": "volume",
|
||||
"Name": "postgres_data",
|
||||
"Source": "/var/lib/docker/volumes/postgres_data/_data",
|
||||
"Destination": "/var/lib/postgresql/data",
|
||||
"Driver": "local",
|
||||
"Mode": "rw",
|
||||
"RW": true,
|
||||
"Propagation": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Id": "5c8d1f4e9a2b",
|
||||
"Names": ["/old-service"],
|
||||
"Image": "ubuntu:20.04",
|
||||
"ImageID": "sha256:f643c72bc252",
|
||||
"Command": "/bin/bash",
|
||||
"Created": 1640984400,
|
||||
"Ports": [],
|
||||
"Labels": {},
|
||||
"State": "exited",
|
||||
"Status": "Exited (0) 2 hours ago",
|
||||
"HostConfig": {
|
||||
"NetworkMode": "default"
|
||||
},
|
||||
"NetworkSettings": {
|
||||
"Networks": {
|
||||
"bridge": {
|
||||
"IPAMConfig": null,
|
||||
"Links": null,
|
||||
"Aliases": null,
|
||||
"NetworkID": "",
|
||||
"EndpointID": "",
|
||||
"Gateway": "",
|
||||
"IPAddress": "",
|
||||
"IPPrefixLen": 0,
|
||||
"IPv6Gateway": "",
|
||||
"GlobalIPv6Address": "",
|
||||
"GlobalIPv6PrefixLen": 0,
|
||||
"MacAddress": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"Mounts": []
|
||||
},
|
||||
{
|
||||
"Id": "1a2b3c4d5e6f",
|
||||
"Names": ["/backup-job"],
|
||||
"Image": "alpine:latest",
|
||||
"ImageID": "sha256:c059bfaa849c",
|
||||
"Command": "sh -c 'sleep 3600'",
|
||||
"Created": 1640980800,
|
||||
"Ports": [],
|
||||
"Labels": {},
|
||||
"State": "exited",
|
||||
"Status": "Exited (0) 30 minutes ago",
|
||||
"HostConfig": {
|
||||
"NetworkMode": "default"
|
||||
},
|
||||
"NetworkSettings": {
|
||||
"Networks": {
|
||||
"bridge": {
|
||||
"IPAMConfig": null,
|
||||
"Links": null,
|
||||
"Aliases": null,
|
||||
"NetworkID": "",
|
||||
"EndpointID": "",
|
||||
"Gateway": "",
|
||||
"IPAddress": "",
|
||||
"IPPrefixLen": 0,
|
||||
"IPv6Gateway": "",
|
||||
"GlobalIPv6Address": "",
|
||||
"GlobalIPv6PrefixLen": 0,
|
||||
"MacAddress": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"Mounts": []
|
||||
}
|
||||
]
|
||||
1
dummy-data/docuseal/version
Normal file
1
dummy-data/docuseal/version
Normal file
|
|
@ -0,0 +1 @@
|
|||
1.8.3a
|
||||
24
dummy-data/emby/System/info/public
Normal file
24
dummy-data/emby/System/info/public
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"LocalAddress": "192.168.1.100:8096",
|
||||
"ServerName": "Homer-Emby-Server",
|
||||
"Version": "4.8.8.0",
|
||||
"ProductName": "Emby Server",
|
||||
"OperatingSystem": "Linux",
|
||||
"Id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
|
||||
"StartupWizardCompleted": true,
|
||||
"SupportsLibraryMonitor": true,
|
||||
"WebSocketPortNumber": 8096,
|
||||
"CompletedInstallations": [],
|
||||
"CanSelfRestart": true,
|
||||
"CanSelfUpdate": true,
|
||||
"CanLaunchWebBrowser": false,
|
||||
"WanAddress": "192.168.1.100:8096",
|
||||
"HasUpdateAvailable": false,
|
||||
"SupportsAutoRunAtStartup": false,
|
||||
"TranscodingTempPath": "/var/lib/emby/transcoding-temp",
|
||||
"CachePath": "/var/lib/emby/cache",
|
||||
"LogPath": "/var/log/emby",
|
||||
"InternalMetadataPath": "/var/lib/emby/metadata",
|
||||
"ItemsByNamePath": "/var/lib/emby/metadata/People",
|
||||
"ProgramDataPath": "/var/lib/emby"
|
||||
}
|
||||
12
dummy-data/emby/items/counts
Normal file
12
dummy-data/emby/items/counts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"MovieCount": 1247,
|
||||
"SeriesCount": 89,
|
||||
"EpisodeCount": 2156,
|
||||
"ArtistCount": 234,
|
||||
"AlbumCount": 567,
|
||||
"SongCount": 8923,
|
||||
"MusicVideoCount": 42,
|
||||
"BoxSetCount": 23,
|
||||
"BookCount": 156,
|
||||
"ItemCount": 13437
|
||||
}
|
||||
3
dummy-data/freshrss/api/greader.php/accounts/ClientLogin
Normal file
3
dummy-data/freshrss/api/greader.php/accounts/ClientLogin
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
SID=username/c7fef7ce380efb8c79a0df25686a3387
|
||||
LSID=null
|
||||
Auth=username/c7fef7ce380efb8c79a0df25686a3387
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"subscriptions":[{"id":"feed/3","title":"Test News","categories":[{"id":"user/-/label/News","label":"News"}],"url":"https://www.reddit.com/r/testnews.rss","htmlUrl":"https://www.reddit.com/r/testnews","iconUrl":"http://192.168.10.165/f.php?b4a11f09"},{"id":"feed/17","title":"Announcements Latest Topics","categories":[{"id":"user/-/label/Technology","label":"Technology"}],"url":"https://forums.testsite.net/forums/forum/7-announcements.xml","htmlUrl":"https://forums.testsite.net/forum/7-announcements/","iconUrl":"http://192.168.10.165/f.php?70b5fd98"},{"id":"feed/16","title":"Blog","categories":[{"id":"user/-/label/Technology","label":"Technology"}],"url":"https://www.firewall.com/blog/rss.xml","htmlUrl":"https://www.firewall.com/blog","iconUrl":"http://192.168.20.165/f.php?0107d102"},{"id":"feed/2","title":"techsite","categories":[{"id":"user/-/label/Technology","label":"Technology"}],"url":"https://techsite.com/rss","htmlUrl":"https://techsite.com/","iconUrl":"http://192.168.10.100/f.php?69ad225d"},{"id":"feed/5","title":"Hackaday","categories":[{"id":"user/-/label/Technology","label":"Technology"}],"url":"https://hackaday.com/feed/","htmlUrl":"https://hackaday.com/","iconUrl":"http://192.168.10.15/f.php?7be93110"},{"id":"feed/7","title":"Self-Hosted Alternatives to Popular Services","categories":[{"id":"user/-/label/Technology","label":"Technology"}],"url":"https://www.reddit.com/r/selfhosted.rss","htmlUrl":"https://www.reddit.com/r/selfhosted","iconUrl":"http://192.168.10.100/f.php?87bdf454"},{"id":"feed/15","title":"UniFi Access Point/Switch/LTE | Releases | Ubiquiti Community","categories":[{"id":"user/-/label/Technology","label":"Technology"}],"url":"https://community.ui.com/rss/releases/UniFi-Access-Point-Switch-LTE/9fc3b2fa-9e73-449a-924f-470e79884470","htmlUrl":"https://community.ui.com/","iconUrl":"http://192.168.10.100/f.php?a8b7368a"},{"id":"feed/14","title":"UniFi Network Application | Releases | Ubiquiti Community","categories":[{"id":"user/-/label/Technology","label":"Technology"}],"url":"https://community.ui.com/rss/releases/UniFi-Network-Application/e6712595-81bb-4829-8e42-9e2630fabcfe","htmlUrl":"https://community.ui.com/","iconUrl":"http://192.168.10.100/f.php?87f0ed63"},{"id":"feed/1","title":"FreshRSS releases","categories":[{"id":"user/-/label/Uncategorized","label":"Uncategorized"}],"url":"https://github.com/FreshRSS/FreshRSS/releases.atom","htmlUrl":"https://github.com/FreshRSS/FreshRSS/","iconUrl":"http://192.168.10.100/f.php?261334e9"},{"id":"feed/10","title":"Hooked on Wood","categories":[{"id":"user/-/label/Videos","label":"Videos"}],"url":"https://www.youtube.com/feeds/videos.xml?channel_id=UCuvjeMfKGqSoYc32Xk5MLfQ","htmlUrl":"https://www.youtube.com/channel/UCuvjeMfKGqSoYc32Xk5MLfQ","iconUrl":"http://192.168.10.100/f.php?e6aff645"},{"id":"feed/11","title":"Jeff Geerling","categories":[{"id":"user/-/label/Videos","label":"Videos"}],"url":"https://www.youtube.com/feeds/videos.xml?channel_id=UCR-DXc1voovS8nhAvccRZhg","htmlUrl":"https://www.youtube.com/channel/UCR-DXc1voovS8nhAvccRZhg","iconUrl":"http://192.168.10.100/f.php?5b542c1f"},{"id":"feed/9","title":"Lawrence Systems","categories":[{"id":"user/-/label/Videos","label":"Videos"}],"url":"https://www.youtube.com/feeds/videos.xml?channel_id=UCHkYOD-3fZbuGhwsADBd9ZQ","htmlUrl":"https://www.youtube.com/channel/UCHkYOD-3fZbuGhwsADBd9ZQ","iconUrl":"http://192.168.10.100/f.php?3ab68f8e"},{"id":"feed/13","title":"Thunderf00t","categories":[{"id":"user/-/label/Videos","label":"Videos"}],"url":"https://www.youtube.com/feeds/videos.xml?channel_id=UCmb8hO2ilV9vRa8cilis88A","htmlUrl":"https://www.youtube.com/channel/UCmb8hO2ilV9vRa8cilis88A","iconUrl":"http://192.168.10.100/f.php?d87007ad"}]}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"max":1070,"unreadcounts":[{"id":"feed/3","count":234,"newestItemTimestampUsec":"1690915225367106"},{"id":"user/-/label/News","count":234,"newestItemTimestampUsec":"1690915225367106"},{"id":"feed/17","count":48,"newestItemTimestampUsec":"1689390054724200"},{"id":"feed/16","count":17,"newestItemTimestampUsec":"1689796853964422"},{"id":"feed/2","count":219,"newestItemTimestampUsec":"1690916425408239"},{"id":"feed/5","count":199,"newestItemTimestampUsec":"1690915225367107"},{"id":"feed/7","count":211,"newestItemTimestampUsec":"1690916425408242"},{"id":"feed/15","count":22,"newestItemTimestampUsec":"1689663652972458"},{"id":"feed/14","count":21,"newestItemTimestampUsec":"1688368807781577"},{"id":"user/-/label/Technology","count":737,"newestItemTimestampUsec":"1690916425408242"},{"id":"feed/1","count":10,"newestItemTimestampUsec":"1687016967198678"},{"id":"user/-/label/Uncategorized","count":10,"newestItemTimestampUsec":"1687016967198678"},{"id":"feed/10","count":15,"newestItemTimestampUsec":"1688654406671211"},{"id":"feed/11","count":25,"newestItemTimestampUsec":"1690902033356786"},{"id":"feed/9","count":34,"newestItemTimestampUsec":"1690736426018726"},{"id":"feed/13","count":15,"newestItemTimestampUsec":"1690837226605329"},{"id":"user/-/label/Videos","count":89,"newestItemTimestampUsec":"1690902033356786"},{"id":"user/-/state/com.google/reading-list","count":1070,"newestItemTimestampUsec":"1690916425408242"}]}
|
||||
211
dummy-data/gatus/api/v1/endpoints/statuses
Normal file
211
dummy-data/gatus/api/v1/endpoints/statuses
Normal file
|
|
@ -0,0 +1,211 @@
|
|||
[
|
||||
{
|
||||
"name": "Gateway",
|
||||
"group": "Services",
|
||||
"key": "services_gateway",
|
||||
"results": [
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "gateway.example.com",
|
||||
"duration": 10000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": true
|
||||
},
|
||||
{
|
||||
"condition": "[RESPONSE_TIME] < 500",
|
||||
"success": true
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"timestamp": "2025-05-26T07:35:41.784208588Z"
|
||||
},
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "gateway.example.com",
|
||||
"duration": 10000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": true
|
||||
},
|
||||
{
|
||||
"condition": "[RESPONSE_TIME] < 500",
|
||||
"success": true
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"timestamp": "2025-05-26T07:40:41.804489793Z"
|
||||
},
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "gateway.example.com",
|
||||
"duration": 10000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": true
|
||||
},
|
||||
{
|
||||
"condition": "[RESPONSE_TIME] < 500",
|
||||
"success": true
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"timestamp": "2025-05-26T07:45:41.837925713Z"
|
||||
},
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "gateway.example.com",
|
||||
"duration": 10000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": true
|
||||
},
|
||||
{
|
||||
"condition": "[RESPONSE_TIME] < 500",
|
||||
"success": true
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"timestamp": "2025-05-26T07:50:41.848391366Z"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Website",
|
||||
"group": "External",
|
||||
"key": "external_website",
|
||||
"results": [
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "www.example.com",
|
||||
"duration": 10000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": true
|
||||
},
|
||||
{
|
||||
"condition": "[RESPONSE_TIME] < 500",
|
||||
"success": false
|
||||
}
|
||||
],
|
||||
"success": false,
|
||||
"timestamp": "2025-05-26T07:35:41.784208588Z"
|
||||
},
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "gateway.example.com",
|
||||
"duration": 10000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": false
|
||||
},
|
||||
{
|
||||
"condition": "[RESPONSE_TIME] < 500",
|
||||
"success": true
|
||||
}
|
||||
],
|
||||
"success": false,
|
||||
"timestamp": "2025-05-26T07:40:41.804489793Z"
|
||||
},
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "gateway.example.com",
|
||||
"duration": 10000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": true
|
||||
},
|
||||
{
|
||||
"condition": "[RESPONSE_TIME] < 500",
|
||||
"success": true
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"timestamp": "2025-05-26T07:45:41.837925713Z"
|
||||
},
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "gateway.example.com",
|
||||
"duration": 10000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": true
|
||||
},
|
||||
{
|
||||
"condition": "[RESPONSE_TIME] < 500",
|
||||
"success": true
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"timestamp": "2025-05-26T07:50:41.848391366Z"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DNS",
|
||||
"group": "Services",
|
||||
"key": "services_dns",
|
||||
"results": [
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "ns1.example",
|
||||
"duration": 20000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": false
|
||||
}
|
||||
],
|
||||
"success": false,
|
||||
"timestamp": "2025-05-26T07:35:41.784208588Z"
|
||||
},
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "ns1.example.com",
|
||||
"duration": 20000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": false
|
||||
}
|
||||
],
|
||||
"success": false,
|
||||
"timestamp": "2025-05-26T07:40:41.804489793Z"
|
||||
},
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "ns1.example.com",
|
||||
"duration": 20000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": false
|
||||
}
|
||||
],
|
||||
"success": false,
|
||||
"timestamp": "2025-05-26T07:45:41.837925713Z"
|
||||
},
|
||||
{
|
||||
"status": 200,
|
||||
"hostname": "ns1.example.com",
|
||||
"duration": 20000000,
|
||||
"conditionResults": [
|
||||
{
|
||||
"condition": "[STATUS] == 200",
|
||||
"success": false
|
||||
}
|
||||
],
|
||||
"success": false,
|
||||
"timestamp": "2025-05-26T07:50:41.848391366Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
11
dummy-data/gitea/swagger.v1.json
Normal file
11
dummy-data/gitea/swagger.v1.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"info": {
|
||||
"description": "This documentation describes the Forgejo API.",
|
||||
"title": "Forgejo API",
|
||||
"license": {
|
||||
"name": "MIT",
|
||||
"url": "http://opensource.org/licenses/MIT"
|
||||
},
|
||||
"version": "8.0.3+gitea-1.22.0"
|
||||
}
|
||||
}
|
||||
1
dummy-data/glances/api/4/quicklook
Normal file
1
dummy-data/glances/api/4/quicklook
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"cpu_name":"AMD Ryzen 7 3700X 8-Core Processor","cpu_hz_current":2662987562.5,"cpu_hz":3600000000.0,"cpu":3.7,"percpu":[{"key":"cpu_number","cpu_number":0,"total":5.1,"user":3.3,"system":0.6,"idle":94.9,"nice":0.0,"iowait":0.0,"irq":0.8,"softirq":0.3,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":1,"total":2.6,"user":2.0,"system":0.5,"idle":97.4,"nice":0.0,"iowait":0.0,"irq":0.1,"softirq":0.1,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":2,"total":1.6,"user":1.1,"system":0.3,"idle":98.4,"nice":0.0,"iowait":0.1,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":3,"total":7.4,"user":6.2,"system":0.9,"idle":92.6,"nice":0.0,"iowait":0.1,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":4,"total":1.3,"user":0.9,"system":0.4,"idle":98.7,"nice":0.0,"iowait":0.0,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":5,"total":10.4,"user":8.9,"system":1.2,"idle":89.6,"nice":0.0,"iowait":0.1,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":6,"total":3.1,"user":2.3,"system":0.6,"idle":96.9,"nice":0.0,"iowait":0.1,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":7,"total":2.1,"user":1.3,"system":0.6,"idle":97.9,"nice":0.0,"iowait":0.1,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":8,"total":5.8,"user":4.9,"system":0.7,"idle":94.2,"nice":0.0,"iowait":0.1,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":9,"total":2.0,"user":1.3,"system":0.4,"idle":98.0,"nice":0.0,"iowait":0.2,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":10,"total":1.5,"user":0.9,"system":0.3,"idle":98.5,"nice":0.0,"iowait":0.2,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":11,"total":5.3,"user":4.6,"system":0.6,"idle":94.7,"nice":0.0,"iowait":0.1,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":12,"total":1.5,"user":1.0,"system":0.4,"idle":98.5,"nice":0.0,"iowait":0.0,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":13,"total":5.7,"user":4.9,"system":0.7,"idle":94.3,"nice":0.0,"iowait":0.0,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":14,"total":2.9,"user":2.0,"system":0.8,"idle":97.1,"nice":0.0,"iowait":0.0,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null},{"key":"cpu_number","cpu_number":15,"total":1.7,"user":1.1,"system":0.5,"idle":98.3,"nice":0.0,"iowait":0.0,"irq":0.1,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"dpc":null,"interrupt":null}],"mem":59.6,"swap":0.0,"cpu_log_core":16,"cpu_phys_core":8,"load":5.7}
|
||||
4
dummy-data/gotify/health
Normal file
4
dummy-data/gotify/health
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"health": "green",
|
||||
"database": "green"
|
||||
}
|
||||
65
dummy-data/gotify/message
Normal file
65
dummy-data/gotify/message
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"messages": [
|
||||
{
|
||||
"id": 1,
|
||||
"appid": 1,
|
||||
"message": "System backup completed successfully",
|
||||
"title": "Backup Service",
|
||||
"priority": 2,
|
||||
"date": "2024-01-15T10:30:00Z"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"appid": 2,
|
||||
"message": "Database optimization finished",
|
||||
"title": "Database Manager",
|
||||
"priority": 1,
|
||||
"date": "2024-01-15T09:15:00Z"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"appid": 1,
|
||||
"message": "Server restart scheduled for maintenance",
|
||||
"title": "System Admin",
|
||||
"priority": 5,
|
||||
"date": "2024-01-15T08:45:00Z"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"appid": 3,
|
||||
"message": "New user registration: john.doe@example.com",
|
||||
"title": "User Management",
|
||||
"priority": 1,
|
||||
"date": "2024-01-15T07:20:00Z"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"appid": 2,
|
||||
"message": "Weekly report generated and sent",
|
||||
"title": "Report Generator",
|
||||
"priority": 2,
|
||||
"date": "2024-01-14T18:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"appid": 4,
|
||||
"message": "Security scan completed - no threats detected",
|
||||
"title": "Security Monitor",
|
||||
"priority": 2,
|
||||
"date": "2024-01-14T16:30:00Z"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"appid": 1,
|
||||
"message": "Disk usage is at 85% on /var partition",
|
||||
"title": "System Monitor",
|
||||
"priority": 4,
|
||||
"date": "2024-01-14T14:15:00Z"
|
||||
}
|
||||
],
|
||||
"paging": {
|
||||
"size": 7,
|
||||
"since": 0,
|
||||
"limit": 100
|
||||
}
|
||||
}
|
||||
95
dummy-data/healthchecks/api/v1/checks
Normal file
95
dummy-data/healthchecks/api/v1/checks
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
{
|
||||
"checks": [
|
||||
{
|
||||
"name": "Database Backup",
|
||||
"tags": "backup database",
|
||||
"desc": "Daily database backup job",
|
||||
"grace": 3600,
|
||||
"n_pings": 127,
|
||||
"status": "up",
|
||||
"last_ping": "2024-01-15T10:30:00+00:00",
|
||||
"next_ping": "2024-01-16T10:30:00+00:00",
|
||||
"manual_resume": false,
|
||||
"methods": "",
|
||||
"unique_key": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
|
||||
},
|
||||
{
|
||||
"name": "Web Server Monitoring",
|
||||
"tags": "web server nginx",
|
||||
"desc": "Monitor web server health",
|
||||
"grace": 300,
|
||||
"n_pings": 2847,
|
||||
"status": "up",
|
||||
"last_ping": "2024-01-15T10:25:00+00:00",
|
||||
"next_ping": "2024-01-15T10:30:00+00:00",
|
||||
"manual_resume": false,
|
||||
"methods": "",
|
||||
"unique_key": "b2c3d4e5-f6g7-8901-bcde-f23456789012"
|
||||
},
|
||||
{
|
||||
"name": "SSL Certificate Check",
|
||||
"tags": "ssl certificate",
|
||||
"desc": "Weekly SSL certificate expiry check",
|
||||
"grace": 86400,
|
||||
"n_pings": 52,
|
||||
"status": "up",
|
||||
"last_ping": "2024-01-14T12:00:00+00:00",
|
||||
"next_ping": "2024-01-21T12:00:00+00:00",
|
||||
"manual_resume": false,
|
||||
"methods": "",
|
||||
"unique_key": "c3d4e5f6-g7h8-9012-cdef-345678901234"
|
||||
},
|
||||
{
|
||||
"name": "Log Cleanup Service",
|
||||
"tags": "cleanup logs maintenance",
|
||||
"desc": "Weekly log file cleanup",
|
||||
"grace": 7200,
|
||||
"n_pings": 15,
|
||||
"status": "grace",
|
||||
"last_ping": "2024-01-13T02:00:00+00:00",
|
||||
"next_ping": "2024-01-20T02:00:00+00:00",
|
||||
"manual_resume": false,
|
||||
"methods": "",
|
||||
"unique_key": "d4e5f6g7-h8i9-0123-defa-456789012345"
|
||||
},
|
||||
{
|
||||
"name": "Email Service",
|
||||
"tags": "email smtp",
|
||||
"desc": "Email service availability check",
|
||||
"grace": 600,
|
||||
"n_pings": 0,
|
||||
"status": "down",
|
||||
"last_ping": "2024-01-12T08:15:00+00:00",
|
||||
"next_ping": "2024-01-15T08:15:00+00:00",
|
||||
"manual_resume": false,
|
||||
"methods": "",
|
||||
"unique_key": "e5f6g7h8-i9j0-1234-efab-567890123456"
|
||||
},
|
||||
{
|
||||
"name": "API Health Check",
|
||||
"tags": "api health",
|
||||
"desc": "External API endpoint health monitoring",
|
||||
"grace": 180,
|
||||
"n_pings": 1440,
|
||||
"status": "up",
|
||||
"last_ping": "2024-01-15T10:28:00+00:00",
|
||||
"next_ping": "2024-01-15T10:30:00+00:00",
|
||||
"manual_resume": false,
|
||||
"methods": "",
|
||||
"unique_key": "f6g7h8i9-j0k1-2345-fabc-678901234567"
|
||||
},
|
||||
{
|
||||
"name": "Backup Verification",
|
||||
"tags": "backup verify",
|
||||
"desc": "Verify backup integrity",
|
||||
"grace": 1800,
|
||||
"n_pings": 45,
|
||||
"status": "grace",
|
||||
"last_ping": "2024-01-14T22:30:00+00:00",
|
||||
"next_ping": "2024-01-15T22:30:00+00:00",
|
||||
"manual_resume": false,
|
||||
"methods": "",
|
||||
"unique_key": "g7h8i9j0-k1l2-3456-gbcd-789012345678"
|
||||
}
|
||||
]
|
||||
}
|
||||
45
dummy-data/homeassistant/api/config
Normal file
45
dummy-data/homeassistant/api/config
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"location_name": "Home",
|
||||
"latitude": 40.7128,
|
||||
"longitude": -74.0060,
|
||||
"elevation": 10,
|
||||
"unit_system": {
|
||||
"length": "km",
|
||||
"mass": "kg",
|
||||
"pressure": "Pa",
|
||||
"temperature": "°C",
|
||||
"volume": "L"
|
||||
},
|
||||
"time_zone": "America/New_York",
|
||||
"components": [
|
||||
"automation",
|
||||
"climate",
|
||||
"device_tracker",
|
||||
"frontend",
|
||||
"history",
|
||||
"light",
|
||||
"logger",
|
||||
"media_player",
|
||||
"recorder",
|
||||
"script",
|
||||
"sensor",
|
||||
"switch",
|
||||
"system_health",
|
||||
"weather"
|
||||
],
|
||||
"config_dir": "/config",
|
||||
"allowlist_external_dirs": [
|
||||
"/config",
|
||||
"/share"
|
||||
],
|
||||
"allowlist_external_urls": [],
|
||||
"version": "2024.1.5",
|
||||
"config_source": "storage",
|
||||
"recovery_mode": false,
|
||||
"state": "RUNNING",
|
||||
"external_url": null,
|
||||
"internal_url": null,
|
||||
"currency": "USD",
|
||||
"country": "US",
|
||||
"language": "en"
|
||||
}
|
||||
141
dummy-data/homeassistant/api/states
Normal file
141
dummy-data/homeassistant/api/states
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
[
|
||||
{
|
||||
"entity_id": "sensor.living_room_temperature",
|
||||
"state": "22.5",
|
||||
"attributes": {
|
||||
"unit_of_measurement": "°C",
|
||||
"device_class": "temperature",
|
||||
"friendly_name": "Living Room Temperature"
|
||||
},
|
||||
"last_changed": "2024-01-15T10:30:00+00:00",
|
||||
"last_updated": "2024-01-15T10:30:00+00:00",
|
||||
"context": {
|
||||
"id": "01HMV123456789",
|
||||
"parent_id": null,
|
||||
"user_id": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"entity_id": "light.bedroom_ceiling",
|
||||
"state": "on",
|
||||
"attributes": {
|
||||
"brightness": 180,
|
||||
"color_mode": "brightness",
|
||||
"supported_color_modes": ["brightness"],
|
||||
"friendly_name": "Bedroom Ceiling Light"
|
||||
},
|
||||
"last_changed": "2024-01-15T09:15:00+00:00",
|
||||
"last_updated": "2024-01-15T09:15:00+00:00",
|
||||
"context": {
|
||||
"id": "01HMV234567890",
|
||||
"parent_id": null,
|
||||
"user_id": "user123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"entity_id": "switch.coffee_maker",
|
||||
"state": "off",
|
||||
"attributes": {
|
||||
"friendly_name": "Coffee Maker"
|
||||
},
|
||||
"last_changed": "2024-01-14T22:00:00+00:00",
|
||||
"last_updated": "2024-01-14T22:00:00+00:00",
|
||||
"context": {
|
||||
"id": "01HMV345678901",
|
||||
"parent_id": null,
|
||||
"user_id": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"entity_id": "climate.living_room",
|
||||
"state": "heat",
|
||||
"attributes": {
|
||||
"temperature": 21.0,
|
||||
"current_temperature": 20.5,
|
||||
"hvac_modes": ["off", "heat", "cool", "auto"],
|
||||
"min_temp": 7.0,
|
||||
"max_temp": 35.0,
|
||||
"target_temp_step": 0.5,
|
||||
"friendly_name": "Living Room Thermostat"
|
||||
},
|
||||
"last_changed": "2024-01-15T08:00:00+00:00",
|
||||
"last_updated": "2024-01-15T10:25:00+00:00",
|
||||
"context": {
|
||||
"id": "01HMV456789012",
|
||||
"parent_id": null,
|
||||
"user_id": "user123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"entity_id": "sensor.front_door",
|
||||
"state": "closed",
|
||||
"attributes": {
|
||||
"device_class": "door",
|
||||
"friendly_name": "Front Door"
|
||||
},
|
||||
"last_changed": "2024-01-15T07:30:00+00:00",
|
||||
"last_updated": "2024-01-15T07:30:00+00:00",
|
||||
"context": {
|
||||
"id": "01HMV567890123",
|
||||
"parent_id": null,
|
||||
"user_id": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"entity_id": "media_player.living_room_tv",
|
||||
"state": "playing",
|
||||
"attributes": {
|
||||
"volume_level": 0.4,
|
||||
"is_volume_muted": false,
|
||||
"media_content_type": "tvshow",
|
||||
"media_title": "The Office",
|
||||
"app_name": "Netflix",
|
||||
"friendly_name": "Living Room TV"
|
||||
},
|
||||
"last_changed": "2024-01-15T10:00:00+00:00",
|
||||
"last_updated": "2024-01-15T10:20:00+00:00",
|
||||
"context": {
|
||||
"id": "01HMV678901234",
|
||||
"parent_id": null,
|
||||
"user_id": "user123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"entity_id": "automation.morning_routine",
|
||||
"state": "on",
|
||||
"attributes": {
|
||||
"last_triggered": "2024-01-15T07:00:00+00:00",
|
||||
"mode": "single",
|
||||
"current": 0,
|
||||
"friendly_name": "Morning Routine"
|
||||
},
|
||||
"last_changed": "2024-01-14T07:00:00+00:00",
|
||||
"last_updated": "2024-01-15T07:00:00+00:00",
|
||||
"context": {
|
||||
"id": "01HMV789012345",
|
||||
"parent_id": null,
|
||||
"user_id": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"entity_id": "weather.home",
|
||||
"state": "partly-cloudy",
|
||||
"attributes": {
|
||||
"temperature": 18.0,
|
||||
"humidity": 65,
|
||||
"pressure": 1013.2,
|
||||
"wind_speed": 12.5,
|
||||
"wind_bearing": 225,
|
||||
"visibility": 16.0,
|
||||
"forecast": [],
|
||||
"friendly_name": "Home Weather"
|
||||
},
|
||||
"last_changed": "2024-01-15T10:00:00+00:00",
|
||||
"last_updated": "2024-01-15T10:30:00+00:00",
|
||||
"context": {
|
||||
"id": "01HMV890123456",
|
||||
"parent_id": null,
|
||||
"user_id": null
|
||||
}
|
||||
}
|
||||
]
|
||||
3
dummy-data/homeassistant/api_root
Normal file
3
dummy-data/homeassistant/api_root
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"message": "API running."
|
||||
}
|
||||
1886
dummy-data/hyperhdr/json-rpc
Normal file
1886
dummy-data/hyperhdr/json-rpc
Normal file
File diff suppressed because it is too large
Load diff
1
dummy-data/immich/api/server-info/stats
Normal file
1
dummy-data/immich/api/server-info/stats
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"photos":25754,"videos":1774,"usage":123142197784,"usageByUser":[{"userId":"28eff0e8-60b3-4b4c-9236-bd48559b1400","userFirstName":"John","userLastName":"Doe","photos":14153,"videos":501,"usage":54391364678},{"userId":"f3051051-9794-3470-b253-d1d7c1d46ef3","userFirstName":"John","userLastName":"Doe","photos":0,"videos":0,"usage":0},{"userId":"940bd5e2-bf3d-33e6-86b6-b9d60a1d1e06","userFirstName":"Jane","userLastName":"Doe","photos":11601,"videos":1273,"usage":68750833106}]}
|
||||
41
dummy-data/immich/api/server/statistics
Normal file
41
dummy-data/immich/api/server/statistics
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"photos": 12847,
|
||||
"videos": 1523,
|
||||
"usage": 248576851456,
|
||||
"usageByUser": [
|
||||
{
|
||||
"userId": "user-1234-5678-9abc-def0",
|
||||
"userName": "john.doe",
|
||||
"photos": 8945,
|
||||
"videos": 892,
|
||||
"usage": 156789012345
|
||||
},
|
||||
{
|
||||
"userId": "user-2345-6789-abcd-ef01",
|
||||
"userName": "jane.smith",
|
||||
"photos": 2134,
|
||||
"videos": 423,
|
||||
"usage": 67891234567
|
||||
},
|
||||
{
|
||||
"userId": "user-3456-789a-bcde-f012",
|
||||
"userName": "family.shared",
|
||||
"photos": 1768,
|
||||
"videos": 208,
|
||||
"usage": 23896604544
|
||||
}
|
||||
],
|
||||
"usageRaw": 248576851456,
|
||||
"photosGrowth": {
|
||||
"date": "2024-01-15",
|
||||
"value": 42
|
||||
},
|
||||
"videosGrowth": {
|
||||
"date": "2024-01-15",
|
||||
"value": 7
|
||||
},
|
||||
"usageGrowth": {
|
||||
"date": "2024-01-15",
|
||||
"value": 2147483648
|
||||
}
|
||||
}
|
||||
342
dummy-data/jellystat/proxy/getSessions
Normal file
342
dummy-data/jellystat/proxy/getSessions
Normal file
|
|
@ -0,0 +1,342 @@
|
|||
[
|
||||
{
|
||||
"PlayState": {
|
||||
"CanSeek": true,
|
||||
"IsPaused": false,
|
||||
"IsMuted": false,
|
||||
"RepeatMode": "RepeatNone",
|
||||
"ShuffleMode": "Sorted",
|
||||
"VolumeLevel": 85,
|
||||
"AudioStreamIndex": 1,
|
||||
"SubtitleStreamIndex": -1,
|
||||
"MediaSourceId": "12345abcdef",
|
||||
"PlayMethod": "DirectPlay",
|
||||
"PlaySessionId": "session-1-abc123",
|
||||
"PlaylistItemId": "playlist-item-1",
|
||||
"PositionTicks": 18000000000
|
||||
},
|
||||
"AdditionalUsers": [],
|
||||
"Capabilities": {
|
||||
"PlayableMediaTypes": ["Audio", "Video"],
|
||||
"SupportedCommands": ["Play", "Pause", "Stop", "Seek"]
|
||||
},
|
||||
"RemoteEndPoint": "192.168.1.100",
|
||||
"PlayableMediaTypes": ["Audio", "Video"],
|
||||
"Id": "session-1-abc123",
|
||||
"UserId": "user123abc",
|
||||
"UserName": "john_doe",
|
||||
"Client": "Jellyfin Web",
|
||||
"LastActivityDate": "2024-01-15T10:30:00.0000000Z",
|
||||
"LastPlaybackCheckIn": "2024-01-15T10:30:00.0000000Z",
|
||||
"DeviceName": "Chrome on Desktop",
|
||||
"DeviceId": "device-desktop-chrome",
|
||||
"ApplicationVersion": "10.8.13",
|
||||
"IsActive": true,
|
||||
"SupportsMediaControl": true,
|
||||
"SupportsRemoteControl": true,
|
||||
"NowPlayingItem": {
|
||||
"Name": "The Office - S03E01 - Gay Witch Hunt",
|
||||
"OriginalTitle": "Gay Witch Hunt",
|
||||
"Id": "episode123abc",
|
||||
"Etag": "etag123",
|
||||
"SourceType": "Library",
|
||||
"PlaylistItemId": "playlist-item-1",
|
||||
"DateCreated": "2024-01-10T00:00:00.0000000Z",
|
||||
"DateLastMediaAdded": "2024-01-10T00:00:00.0000000Z",
|
||||
"ExtraType": null,
|
||||
"AirsBeforeSeasonNumber": null,
|
||||
"AirsAfterSeasonNumber": null,
|
||||
"AirsBeforeEpisodeNumber": null,
|
||||
"CanDelete": false,
|
||||
"CanDownload": false,
|
||||
"HasSubtitles": true,
|
||||
"Container": "mkv",
|
||||
"SortName": "office s03e01 gay witch hunt",
|
||||
"ForcedSortName": null,
|
||||
"Video3DFormat": null,
|
||||
"PremiereDate": "2006-09-21T00:00:00.0000000Z",
|
||||
"ExternalUrls": [],
|
||||
"MediaSources": [],
|
||||
"CriticRating": null,
|
||||
"ProductionLocations": [],
|
||||
"Path": "/media/tv/The Office/Season 03/S03E01.mkv",
|
||||
"EnableMediaSourceDisplay": true,
|
||||
"OfficialRating": "TV-14",
|
||||
"CustomRating": null,
|
||||
"ChannelId": null,
|
||||
"ChannelName": null,
|
||||
"Overview": "Michael's kiss with Oscar at the Dundies leads to sensitivity training for the office.",
|
||||
"Taglines": [],
|
||||
"Genres": ["Comedy"],
|
||||
"CommunityRating": 8.1,
|
||||
"CumulativeRunTimeTicks": 13050000000,
|
||||
"RunTimeTicks": 13050000000,
|
||||
"PlayAccess": "Full",
|
||||
"AspectRatio": "16:9",
|
||||
"ProductionYear": 2006,
|
||||
"IsPlaceHolder": false,
|
||||
"Number": null,
|
||||
"ChannelNumber": null,
|
||||
"IndexNumber": 1,
|
||||
"IndexNumberEnd": null,
|
||||
"ParentIndexNumber": 3,
|
||||
"RemoteTrailers": [],
|
||||
"ProviderIds": {},
|
||||
"IsHD": true,
|
||||
"IsFolder": false,
|
||||
"ParentId": "season3abc",
|
||||
"Type": "Episode",
|
||||
"People": [],
|
||||
"Studios": [],
|
||||
"GenreItems": [],
|
||||
"ParentLogoItemId": null,
|
||||
"ParentBackdropItemId": "series123",
|
||||
"ParentBackdropImageTags": ["backdrop1"],
|
||||
"LocalTrailerCount": 0,
|
||||
"UserData": {
|
||||
"Rating": null,
|
||||
"PlayedPercentage": 75.5,
|
||||
"UnplayedItemCount": null,
|
||||
"PlaybackPositionTicks": 18000000000,
|
||||
"PlayCount": 1,
|
||||
"IsFavorite": false,
|
||||
"Likes": null,
|
||||
"LastPlayedDate": "2024-01-15T10:30:00.0000000Z",
|
||||
"Played": false,
|
||||
"Key": "episode123abc"
|
||||
},
|
||||
"RecursiveItemCount": 0,
|
||||
"ChildCount": 0,
|
||||
"SeriesName": "The Office",
|
||||
"SeriesId": "series123",
|
||||
"SeasonId": "season3abc",
|
||||
"SpecialFeatureCount": 0,
|
||||
"DisplayPreferencesId": "episode123abc",
|
||||
"Status": null,
|
||||
"AirTime": null,
|
||||
"AirDays": [],
|
||||
"Tags": [],
|
||||
"PrimaryImageAspectRatio": 1.777777777777778,
|
||||
"Artists": [],
|
||||
"ArtistItems": [],
|
||||
"Album": null,
|
||||
"CollectionType": null,
|
||||
"DisplayOrder": null,
|
||||
"AlbumId": null,
|
||||
"AlbumPrimaryImageTag": null,
|
||||
"SeriesPrimaryImageTag": "series-primary",
|
||||
"AlbumArtist": null,
|
||||
"AlbumArtists": [],
|
||||
"SeasonName": "Season 3",
|
||||
"MediaStreams": [],
|
||||
"VideoType": "VideoFile",
|
||||
"PartCount": 1,
|
||||
"MediaSourceCount": 1,
|
||||
"ImageTags": {
|
||||
"Primary": "episode-primary"
|
||||
},
|
||||
"BackdropImageTags": [],
|
||||
"ScreenshotImageTags": [],
|
||||
"ParentLogoImageTag": null,
|
||||
"ParentArtItemId": null,
|
||||
"ParentArtImageTag": null,
|
||||
"SeriesThumbImageTag": null,
|
||||
"ImageBlurHashes": {},
|
||||
"SeriesStudio": "NBC",
|
||||
"ParentThumbItemId": null,
|
||||
"ParentThumbImageTag": null,
|
||||
"ParentPrimaryImageItemId": "series123",
|
||||
"ParentPrimaryImageTag": "series-primary",
|
||||
"Chapters": [],
|
||||
"LocationType": "FileSystem",
|
||||
"IsoType": null,
|
||||
"MediaType": "Video",
|
||||
"EndDate": null,
|
||||
"LockedFields": [],
|
||||
"TrailerCount": 0,
|
||||
"MovieCount": 0,
|
||||
"SeriesCount": 0,
|
||||
"ProgramCount": 0,
|
||||
"EpisodeCount": 0,
|
||||
"SongCount": 0,
|
||||
"AlbumCount": 0,
|
||||
"ArtistCount": 0,
|
||||
"MusicVideoCount": 0,
|
||||
"LockData": false,
|
||||
"Width": 1920,
|
||||
"Height": 1080,
|
||||
"CameraMake": null,
|
||||
"CameraModel": null,
|
||||
"Software": null,
|
||||
"ExposureTime": null,
|
||||
"FocalLength": null,
|
||||
"ImageOrientation": null,
|
||||
"Aperture": null,
|
||||
"ShutterSpeed": null,
|
||||
"Latitude": null,
|
||||
"Longitude": null,
|
||||
"Altitude": null,
|
||||
"IsoSpeedRating": null,
|
||||
"SeriesTimerId": null,
|
||||
"ProgramId": null,
|
||||
"ChannelPrimaryImageTag": null,
|
||||
"StartDate": null,
|
||||
"CompletionPercentage": null,
|
||||
"IsRepeat": null,
|
||||
"EpisodeTitle": "Gay Witch Hunt",
|
||||
"ChannelType": null,
|
||||
"Audio": null,
|
||||
"IsMovie": false,
|
||||
"IsSports": false,
|
||||
"IsNews": false,
|
||||
"IsKids": false,
|
||||
"IsPremiere": false,
|
||||
"TimerId": null,
|
||||
"NormalizationGain": null,
|
||||
"CurrentProgram": null
|
||||
},
|
||||
"FullNowPlayingItem": {},
|
||||
"NowViewingItem": null,
|
||||
"DeviceType": "Desktop",
|
||||
"NowPlayingQueue": [],
|
||||
"NowPlayingQueueFullItems": [],
|
||||
"HasCustomDeviceName": false,
|
||||
"PlaylistItemId": "playlist-item-1",
|
||||
"ServerId": "jellyfin-server-123",
|
||||
"UserPrimaryImageTag": null,
|
||||
"SupportedCommands": []
|
||||
},
|
||||
{
|
||||
"PlayState": {
|
||||
"CanSeek": true,
|
||||
"IsPaused": true,
|
||||
"IsMuted": false,
|
||||
"RepeatMode": "RepeatNone",
|
||||
"ShuffleMode": "Sorted",
|
||||
"VolumeLevel": 65,
|
||||
"AudioStreamIndex": 1,
|
||||
"SubtitleStreamIndex": 2,
|
||||
"MediaSourceId": "67890defghi",
|
||||
"PlayMethod": "DirectPlay",
|
||||
"PlaySessionId": "session-2-def456",
|
||||
"PlaylistItemId": "playlist-item-2",
|
||||
"PositionTicks": 45000000000
|
||||
},
|
||||
"AdditionalUsers": [],
|
||||
"Capabilities": {
|
||||
"PlayableMediaTypes": ["Audio", "Video"],
|
||||
"SupportedCommands": ["Play", "Pause", "Stop", "Seek"]
|
||||
},
|
||||
"RemoteEndPoint": "192.168.1.101",
|
||||
"PlayableMediaTypes": ["Audio", "Video"],
|
||||
"Id": "session-2-def456",
|
||||
"UserId": "user456def",
|
||||
"UserName": "jane_smith",
|
||||
"Client": "Jellyfin Android",
|
||||
"LastActivityDate": "2024-01-15T10:25:00.0000000Z",
|
||||
"LastPlaybackCheckIn": "2024-01-15T10:25:00.0000000Z",
|
||||
"DeviceName": "Samsung Galaxy S21",
|
||||
"DeviceId": "device-android-samsung",
|
||||
"ApplicationVersion": "2.6.2",
|
||||
"IsActive": true,
|
||||
"SupportsMediaControl": true,
|
||||
"SupportsRemoteControl": true,
|
||||
"NowPlayingItem": {
|
||||
"Name": "Inception",
|
||||
"OriginalTitle": "Inception",
|
||||
"Id": "movie456def",
|
||||
"Etag": "etag456",
|
||||
"SourceType": "Library",
|
||||
"PlaylistItemId": "playlist-item-2",
|
||||
"DateCreated": "2024-01-05T00:00:00.0000000Z",
|
||||
"DateLastMediaAdded": "2024-01-05T00:00:00.0000000Z",
|
||||
"Container": "mkv",
|
||||
"SortName": "inception",
|
||||
"PremiereDate": "2010-07-16T00:00:00.0000000Z",
|
||||
"Path": "/media/movies/Inception (2010)/Inception.mkv",
|
||||
"EnableMediaSourceDisplay": true,
|
||||
"OfficialRating": "PG-13",
|
||||
"Overview": "A thief who steals corporate secrets through the use of dream-sharing technology is given the inverse task of planting an idea into the mind of a C.E.O.",
|
||||
"Taglines": ["Your mind is the scene of the crime"],
|
||||
"Genres": ["Action", "Sci-Fi", "Thriller"],
|
||||
"CommunityRating": 8.8,
|
||||
"CumulativeRunTimeTicks": 88800000000,
|
||||
"RunTimeTicks": 88800000000,
|
||||
"PlayAccess": "Full",
|
||||
"AspectRatio": "2.40:1",
|
||||
"ProductionYear": 2010,
|
||||
"IsPlaceHolder": false,
|
||||
"IsHD": true,
|
||||
"IsFolder": false,
|
||||
"Type": "Movie",
|
||||
"LocalTrailerCount": 0,
|
||||
"UserData": {
|
||||
"PlayedPercentage": 50.6,
|
||||
"PlaybackPositionTicks": 45000000000,
|
||||
"PlayCount": 0,
|
||||
"IsFavorite": true,
|
||||
"LastPlayedDate": "2024-01-15T10:25:00.0000000Z",
|
||||
"Played": false,
|
||||
"Key": "movie456def"
|
||||
},
|
||||
"PrimaryImageAspectRatio": 0.6666666666666666,
|
||||
"VideoType": "VideoFile",
|
||||
"PartCount": 1,
|
||||
"MediaSourceCount": 1,
|
||||
"ImageTags": {
|
||||
"Primary": "movie-primary"
|
||||
},
|
||||
"BackdropImageTags": ["backdrop1", "backdrop2"],
|
||||
"LocationType": "FileSystem",
|
||||
"MediaType": "Video",
|
||||
"Width": 1920,
|
||||
"Height": 800,
|
||||
"IsMovie": true,
|
||||
"IsSports": false,
|
||||
"IsNews": false,
|
||||
"IsKids": false,
|
||||
"IsPremiere": false
|
||||
},
|
||||
"FullNowPlayingItem": {},
|
||||
"NowViewingItem": null,
|
||||
"DeviceType": "Phone",
|
||||
"NowPlayingQueue": [],
|
||||
"NowPlayingQueueFullItems": [],
|
||||
"HasCustomDeviceName": false,
|
||||
"PlaylistItemId": "playlist-item-2",
|
||||
"ServerId": "jellyfin-server-123",
|
||||
"UserPrimaryImageTag": null,
|
||||
"SupportedCommands": []
|
||||
},
|
||||
{
|
||||
"PlayState": null,
|
||||
"AdditionalUsers": [],
|
||||
"Capabilities": {
|
||||
"PlayableMediaTypes": ["Audio", "Video"],
|
||||
"SupportedCommands": ["Play", "Pause", "Stop"]
|
||||
},
|
||||
"RemoteEndPoint": "192.168.1.102",
|
||||
"PlayableMediaTypes": ["Audio", "Video"],
|
||||
"Id": "session-3-ghi789",
|
||||
"UserId": "user789ghi",
|
||||
"UserName": "family_user",
|
||||
"Client": "Jellyfin for Roku",
|
||||
"LastActivityDate": "2024-01-15T10:20:00.0000000Z",
|
||||
"LastPlaybackCheckIn": "2024-01-15T10:20:00.0000000Z",
|
||||
"DeviceName": "Roku Ultra",
|
||||
"DeviceId": "device-roku-ultra",
|
||||
"ApplicationVersion": "1.6.8",
|
||||
"IsActive": true,
|
||||
"SupportsMediaControl": true,
|
||||
"SupportsRemoteControl": true,
|
||||
"FullNowPlayingItem": {},
|
||||
"NowViewingItem": null,
|
||||
"DeviceType": "Tv",
|
||||
"NowPlayingQueue": [],
|
||||
"NowPlayingQueueFullItems": [],
|
||||
"HasCustomDeviceName": false,
|
||||
"ServerId": "jellyfin-server-123",
|
||||
"UserPrimaryImageTag": null,
|
||||
"SupportedCommands": []
|
||||
}
|
||||
]
|
||||
1
dummy-data/librislog/api/books/stats
Normal file
1
dummy-data/librislog/api/books/stats
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"total_books":295,"books_read":288,"books_reading":1,"books_want_to_read":6,"books_did_not_finish":0}
|
||||
35
dummy-data/lidarr/api/v1/health
Normal file
35
dummy-data/lidarr/api/v1/health
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[
|
||||
{
|
||||
"source": "IndexerStatusCheck",
|
||||
"type": "warning",
|
||||
"message": "Indexer MusicBrainzDB is unavailable due to recent indexer errors: Service temporarily unavailable",
|
||||
"wikiUrl": "https://wiki.servarr.com/lidarr/health#indexers-are-unavailable-due-to-recent-failures"
|
||||
},
|
||||
{
|
||||
"source": "ImportMechanismCheck",
|
||||
"type": "ok",
|
||||
"message": "No issues with import mechanism checks"
|
||||
},
|
||||
{
|
||||
"source": "DownloadClientStatusCheck",
|
||||
"type": "ok",
|
||||
"message": "All download clients are available"
|
||||
},
|
||||
{
|
||||
"source": "RootFolderCheck",
|
||||
"type": "error",
|
||||
"message": "Missing root folder: /music",
|
||||
"wikiUrl": "https://wiki.servarr.com/lidarr/health#missing-root-folder"
|
||||
},
|
||||
{
|
||||
"source": "UpdateCheck",
|
||||
"type": "ok",
|
||||
"message": "Update available: 1.3.6.3557 -> 2.0.7.3849"
|
||||
},
|
||||
{
|
||||
"source": "MetadataProviderCheck",
|
||||
"type": "warning",
|
||||
"message": "Metadata provider Last.fm API key is invalid or expired",
|
||||
"wikiUrl": "https://wiki.servarr.com/lidarr/health#metadata-provider-issues"
|
||||
}
|
||||
]
|
||||
7
dummy-data/lidarr/api/v1/queue/status
Normal file
7
dummy-data/lidarr/api/v1/queue/status
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"totalCount": 4,
|
||||
"count": 4,
|
||||
"unknownCount": 0,
|
||||
"errors": false,
|
||||
"warnings": false
|
||||
}
|
||||
179
dummy-data/lidarr/api/v1/wanted/missing
Normal file
179
dummy-data/lidarr/api/v1/wanted/missing
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
{
|
||||
"page": 1,
|
||||
"pageSize": 20,
|
||||
"sortKey": "releaseDate",
|
||||
"sortDirection": "descending",
|
||||
"totalRecords": 7,
|
||||
"records": [
|
||||
{
|
||||
"artistId": 1,
|
||||
"albumId": 12345,
|
||||
"foreignAlbumId": "mbid-123-456-789",
|
||||
"title": "Dark Side of the Moon",
|
||||
"disambiguation": "",
|
||||
"overview": "The eighth studio album by Pink Floyd, released in 1973.",
|
||||
"artistName": "Pink Floyd",
|
||||
"foreignArtistId": "mbid-artist-123",
|
||||
"monitored": true,
|
||||
"anyReleaseOk": true,
|
||||
"profileId": 1,
|
||||
"duration": 2580000,
|
||||
"albumType": "Album",
|
||||
"secondaryTypes": [],
|
||||
"mediumCount": 1,
|
||||
"releaseDate": "1973-03-01T00:00:00Z",
|
||||
"releases": [
|
||||
{
|
||||
"id": 67890,
|
||||
"albumId": 12345,
|
||||
"foreignReleaseId": "mbid-release-123",
|
||||
"title": "Dark Side of the Moon",
|
||||
"status": "Official",
|
||||
"duration": 2580000,
|
||||
"trackCount": 10,
|
||||
"mediumCount": 1,
|
||||
"disambiguation": "",
|
||||
"country": ["US"],
|
||||
"label": ["Harvest", "Capitol"],
|
||||
"monitored": true
|
||||
}
|
||||
],
|
||||
"genres": ["Progressive Rock", "Psychedelic Rock"],
|
||||
"media": [
|
||||
{
|
||||
"mediumNumber": 1,
|
||||
"mediumName": "",
|
||||
"mediumFormat": "CD"
|
||||
}
|
||||
],
|
||||
"artist": {
|
||||
"artistName": "Pink Floyd",
|
||||
"foreignArtistId": "mbid-artist-123",
|
||||
"nameSlug": "pink-floyd",
|
||||
"overview": "English rock band formed in London in 1965.",
|
||||
"disambiguation": "",
|
||||
"links": [],
|
||||
"images": [],
|
||||
"path": "/music/Pink Floyd",
|
||||
"qualityProfileId": 1,
|
||||
"metadataProfileId": 1,
|
||||
"monitored": true,
|
||||
"monitorNewItems": "all",
|
||||
"genres": ["Progressive Rock", "Psychedelic Rock", "Art Rock"],
|
||||
"cleanName": "pinkfloyd",
|
||||
"sortName": "Pink Floyd",
|
||||
"tags": [],
|
||||
"added": "2024-01-01T00:00:00Z",
|
||||
"ratings": {
|
||||
"votes": 54321,
|
||||
"value": 9.2
|
||||
},
|
||||
"statistics": {
|
||||
"albumCount": 15,
|
||||
"trackFileCount": 142,
|
||||
"trackCount": 149,
|
||||
"totalTrackCount": 149,
|
||||
"sizeOnDisk": 7516192768,
|
||||
"percentOfTracks": 95.3
|
||||
},
|
||||
"id": 1
|
||||
},
|
||||
"images": [],
|
||||
"links": [],
|
||||
"statistics": {
|
||||
"trackFileCount": 0,
|
||||
"trackCount": 10,
|
||||
"totalTrackCount": 10,
|
||||
"sizeOnDisk": 0,
|
||||
"percentOfTracks": 0.0
|
||||
},
|
||||
"grabbed": false,
|
||||
"id": 12345
|
||||
},
|
||||
{
|
||||
"artistId": 2,
|
||||
"albumId": 23456,
|
||||
"foreignAlbumId": "mbid-234-567-890",
|
||||
"title": "OK Computer",
|
||||
"disambiguation": "",
|
||||
"overview": "The third studio album by Radiohead, released in 1997.",
|
||||
"artistName": "Radiohead",
|
||||
"foreignArtistId": "mbid-artist-234",
|
||||
"monitored": true,
|
||||
"anyReleaseOk": true,
|
||||
"profileId": 1,
|
||||
"duration": 3230000,
|
||||
"albumType": "Album",
|
||||
"secondaryTypes": [],
|
||||
"mediumCount": 1,
|
||||
"releaseDate": "1997-06-16T00:00:00Z",
|
||||
"releases": [
|
||||
{
|
||||
"id": 78901,
|
||||
"albumId": 23456,
|
||||
"foreignReleaseId": "mbid-release-234",
|
||||
"title": "OK Computer",
|
||||
"status": "Official",
|
||||
"duration": 3230000,
|
||||
"trackCount": 12,
|
||||
"mediumCount": 1,
|
||||
"disambiguation": "",
|
||||
"country": ["GB"],
|
||||
"label": ["Parlophone", "Capitol"],
|
||||
"monitored": true
|
||||
}
|
||||
],
|
||||
"genres": ["Alternative Rock", "Art Rock"],
|
||||
"media": [
|
||||
{
|
||||
"mediumNumber": 1,
|
||||
"mediumName": "",
|
||||
"mediumFormat": "CD"
|
||||
}
|
||||
],
|
||||
"artist": {
|
||||
"artistName": "Radiohead",
|
||||
"foreignArtistId": "mbid-artist-234",
|
||||
"nameSlug": "radiohead",
|
||||
"overview": "English rock band formed in Abingdon, Oxfordshire, in 1985.",
|
||||
"disambiguation": "",
|
||||
"links": [],
|
||||
"images": [],
|
||||
"path": "/music/Radiohead",
|
||||
"qualityProfileId": 1,
|
||||
"metadataProfileId": 1,
|
||||
"monitored": true,
|
||||
"monitorNewItems": "all",
|
||||
"genres": ["Alternative Rock", "Art Rock", "Electronic"],
|
||||
"cleanName": "radiohead",
|
||||
"sortName": "Radiohead",
|
||||
"tags": [],
|
||||
"added": "2024-01-01T00:00:00Z",
|
||||
"ratings": {
|
||||
"votes": 45678,
|
||||
"value": 8.9
|
||||
},
|
||||
"statistics": {
|
||||
"albumCount": 9,
|
||||
"trackFileCount": 89,
|
||||
"trackCount": 95,
|
||||
"totalTrackCount": 95,
|
||||
"sizeOnDisk": 4831838208,
|
||||
"percentOfTracks": 93.7
|
||||
},
|
||||
"id": 2
|
||||
},
|
||||
"images": [],
|
||||
"links": [],
|
||||
"statistics": {
|
||||
"trackFileCount": 0,
|
||||
"trackCount": 12,
|
||||
"totalTrackCount": 12,
|
||||
"sizeOnDisk": 0,
|
||||
"percentOfTracks": 0.0
|
||||
},
|
||||
"grabbed": false,
|
||||
"id": 23456
|
||||
}
|
||||
]
|
||||
}
|
||||
61
dummy-data/linkding/api/bookmarks
Normal file
61
dummy-data/linkding/api/bookmarks
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"count": 12,
|
||||
"next": null,
|
||||
"previous": null,
|
||||
"results": [
|
||||
{
|
||||
"id": 1,
|
||||
"url": "https://github.com/bastienwirtz/homer",
|
||||
"title": "Homer - A very simple static homepage for your server",
|
||||
"description": "A dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file.",
|
||||
"notes": "",
|
||||
"website_title": "GitHub",
|
||||
"website_description": "GitHub is where over 100 million developers shape the future of software, together.",
|
||||
"web_archive_snapshot_url": "",
|
||||
"favicon_url": "https://github.githubassets.com/favicons/favicon.svg",
|
||||
"preview_image_url": "",
|
||||
"is_archived": false,
|
||||
"unread": false,
|
||||
"shared": false,
|
||||
"tag_names": ["selfhosted", "dashboard", "yaml"],
|
||||
"date_added": "2024-01-15T10:30:00.123456Z",
|
||||
"date_modified": "2024-01-15T10:30:00.123456Z"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"url": "https://docs.docker.com/",
|
||||
"title": "Docker Documentation",
|
||||
"description": "Official Docker documentation with guides, references, and tutorials for containerization.",
|
||||
"notes": "Essential for container management",
|
||||
"website_title": "Docker Docs",
|
||||
"website_description": "Docker helps developers build, share, run, and verify applications anywhere.",
|
||||
"web_archive_snapshot_url": "",
|
||||
"favicon_url": "https://docs.docker.com/favicons/docs@2x.ico",
|
||||
"preview_image_url": "",
|
||||
"is_archived": false,
|
||||
"unread": false,
|
||||
"shared": false,
|
||||
"tag_names": ["docker", "containers", "documentation"],
|
||||
"date_added": "2024-01-14T15:20:00.123456Z",
|
||||
"date_modified": "2024-01-14T15:20:00.123456Z"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"url": "https://nginx.org/en/docs/",
|
||||
"title": "nginx documentation",
|
||||
"description": "Official nginx web server documentation covering installation, configuration, and modules.",
|
||||
"notes": "",
|
||||
"website_title": "nginx",
|
||||
"website_description": "nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server.",
|
||||
"web_archive_snapshot_url": "",
|
||||
"favicon_url": "https://nginx.org/favicon.ico",
|
||||
"preview_image_url": "",
|
||||
"is_archived": false,
|
||||
"unread": false,
|
||||
"shared": false,
|
||||
"tag_names": ["nginx", "webserver", "proxy"],
|
||||
"date_added": "2024-01-13T09:45:00.123456Z",
|
||||
"date_modified": "2024-01-13T09:45:00.123456Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
6
dummy-data/matrix/_matrix/federation/v1/version
Normal file
6
dummy-data/matrix/_matrix/federation/v1/version
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"server": {
|
||||
"name": "Synapse",
|
||||
"version": "1.99.0"
|
||||
}
|
||||
}
|
||||
18
dummy-data/mealie/api/admin/about/statistics
Normal file
18
dummy-data/mealie/api/admin/about/statistics
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"totalRecipes": 247,
|
||||
"totalUsers": 5,
|
||||
"totalGroups": 2,
|
||||
"totalCategories": 18,
|
||||
"totalTags": 42,
|
||||
"totalTools": 15,
|
||||
"totalMealPlans": 156,
|
||||
"totalShoppingLists": 28,
|
||||
"totalComments": 89,
|
||||
"lastUpdated": "2024-01-15T10:30:00Z",
|
||||
"version": "1.0.0",
|
||||
"demoStatus": false,
|
||||
"allowSignup": true,
|
||||
"defaultGroup": "Home",
|
||||
"buildVersion": "v1.0.0-1234567",
|
||||
"apiVersion": "v1"
|
||||
}
|
||||
64
dummy-data/mealie/api/groups/mealplans/today
Normal file
64
dummy-data/mealie/api/groups/mealplans/today
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
[
|
||||
{
|
||||
"id": "meal-123-abc",
|
||||
"date": "2024-01-15",
|
||||
"entryType": "dinner",
|
||||
"title": "Dinner",
|
||||
"text": "",
|
||||
"recipe": {
|
||||
"id": "recipe-456-def",
|
||||
"name": "Chicken Tikka Masala",
|
||||
"slug": "chicken-tikka-masala",
|
||||
"image": "recipe-456-def.webp",
|
||||
"description": "Creamy tomato-based curry with tender chicken pieces and aromatic spices",
|
||||
"recipeCategory": [
|
||||
{
|
||||
"id": "cat-1",
|
||||
"name": "Indian",
|
||||
"slug": "indian"
|
||||
},
|
||||
{
|
||||
"id": "cat-2",
|
||||
"name": "Main Course",
|
||||
"slug": "main-course"
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
{
|
||||
"id": "tag-1",
|
||||
"name": "Curry",
|
||||
"slug": "curry"
|
||||
},
|
||||
{
|
||||
"id": "tag-2",
|
||||
"name": "Chicken",
|
||||
"slug": "chicken"
|
||||
},
|
||||
{
|
||||
"id": "tag-3",
|
||||
"name": "Spicy",
|
||||
"slug": "spicy"
|
||||
}
|
||||
],
|
||||
"rating": 4.5,
|
||||
"totalTime": "45 minutes",
|
||||
"prepTime": "15 minutes",
|
||||
"cookTime": "30 minutes",
|
||||
"performTime": null,
|
||||
"servings": 4,
|
||||
"dateAdded": "2024-01-10T00:00:00Z",
|
||||
"dateUpdated": "2024-01-14T12:30:00Z",
|
||||
"createdBy": {
|
||||
"id": "user-789",
|
||||
"username": "chef_sarah",
|
||||
"fullName": "Sarah Mitchell"
|
||||
},
|
||||
"updateBy": {
|
||||
"id": "user-789",
|
||||
"username": "chef_sarah",
|
||||
"fullName": "Sarah Mitchell"
|
||||
}
|
||||
},
|
||||
"groupId": "group-default-123"
|
||||
}
|
||||
]
|
||||
108
dummy-data/medusa/api/v2/config
Normal file
108
dummy-data/medusa/api/v2/config
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"system": {
|
||||
"news": {
|
||||
"unread": 3,
|
||||
"latest": [
|
||||
{
|
||||
"title": "Medusa v1.0.19 Released",
|
||||
"date": "2024-01-14",
|
||||
"content": "Bug fixes and performance improvements",
|
||||
"read": false
|
||||
},
|
||||
{
|
||||
"title": "New indexer support added",
|
||||
"date": "2024-01-12",
|
||||
"content": "Support for additional torrent indexers",
|
||||
"read": false
|
||||
},
|
||||
{
|
||||
"title": "Database maintenance completed",
|
||||
"date": "2024-01-10",
|
||||
"content": "Weekly database optimization finished",
|
||||
"read": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"version": {
|
||||
"version": "1.0.19",
|
||||
"branch": "master",
|
||||
"commit": "abc123def456",
|
||||
"dbVersion": 44,
|
||||
"pythonVersion": "3.11.7"
|
||||
},
|
||||
"os": {
|
||||
"platform": "Linux",
|
||||
"release": "6.5.0-15-generic",
|
||||
"version": "#15~22.04.1-Ubuntu"
|
||||
},
|
||||
"memory": {
|
||||
"used": 512.5,
|
||||
"total": 8192.0,
|
||||
"percent": 6.3
|
||||
}
|
||||
},
|
||||
"main": {
|
||||
"logs": {
|
||||
"numWarnings": 2,
|
||||
"numErrors": 1,
|
||||
"loggingLevels": [
|
||||
"DEBUG",
|
||||
"INFO",
|
||||
"WARNING",
|
||||
"ERROR"
|
||||
],
|
||||
"currentLevel": "INFO"
|
||||
},
|
||||
"general": {
|
||||
"webHost": "0.0.0.0",
|
||||
"webPort": 8081,
|
||||
"webRoot": "",
|
||||
"launchBrowser": false,
|
||||
"versionNotify": true,
|
||||
"autoUpdate": false,
|
||||
"logDir": "/app/Logs",
|
||||
"dataDir": "/app/Data",
|
||||
"configVersion": 12
|
||||
},
|
||||
"showDefaults": {
|
||||
"status": "Skipped/Wanted/Snatched/Downloaded",
|
||||
"statusAfter": "Downloaded",
|
||||
"season_folders": true,
|
||||
"anime": false,
|
||||
"scene": false,
|
||||
"archive_firstmatch": false,
|
||||
"quality_default": "Standard Definition",
|
||||
"subtitles": false,
|
||||
"flatten_folders": false,
|
||||
"indexer_default": "tvdb",
|
||||
"indexer_timeout": 20,
|
||||
"skip_removed_files": false
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"general": {
|
||||
"randomize_providers": false,
|
||||
"download_propers": true,
|
||||
"check_propers_interval": "daily",
|
||||
"propers_search_days": 2,
|
||||
"backlog_days": 7,
|
||||
"cache_trimming": false,
|
||||
"max_cache_age": 30
|
||||
},
|
||||
"nzb": {
|
||||
"nzbs": false,
|
||||
"nzbs_uid": "",
|
||||
"nzbs_hash": ""
|
||||
},
|
||||
"torrent": {
|
||||
"torrent_method": "blackhole",
|
||||
"torrent_path": "",
|
||||
"torrent_seed_time": 0,
|
||||
"torrent_paused": false,
|
||||
"torrent_high_bandwidth": false,
|
||||
"torrent_label": "",
|
||||
"torrent_label_anime": "",
|
||||
"torrent_verify_cert": false
|
||||
}
|
||||
}
|
||||
}
|
||||
36
dummy-data/miniflux/v1/entries
Normal file
36
dummy-data/miniflux/v1/entries
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"total": 42,
|
||||
"entries": [
|
||||
{
|
||||
"id": 888,
|
||||
"user_id": 1,
|
||||
"feed_id": 42,
|
||||
"title": "Example Unread Entry",
|
||||
"url": "http://example.org/article.html",
|
||||
"comments_url": "",
|
||||
"author": "John Doe",
|
||||
"content": "<p>This is an unread RSS entry</p>",
|
||||
"hash": "29f99e4074cdacca1766f47697d03c66070ef6a14770a1fd5a867483c207a1bb",
|
||||
"published_at": "2025-11-11T16:15:19Z",
|
||||
"created_at": "2025-11-11T16:15:19Z",
|
||||
"status": "unread",
|
||||
"share_code": "",
|
||||
"starred": false,
|
||||
"reading_time": 5,
|
||||
"enclosures": null,
|
||||
"feed": {
|
||||
"id": 42,
|
||||
"user_id": 1,
|
||||
"title": "Tech Blog",
|
||||
"site_url": "http://example.org",
|
||||
"feed_url": "http://example.org/feed.atom",
|
||||
"checked_at": "2025-11-11T21:06:03.133839Z",
|
||||
"category": {
|
||||
"id": 22,
|
||||
"user_id": 1,
|
||||
"title": "Technology"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
6
dummy-data/netalertx/devices/totals
Normal file
6
dummy-data/netalertx/devices/totals
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"total": 45,
|
||||
"connected": 38,
|
||||
"new": 2,
|
||||
"down": 3
|
||||
}
|
||||
10
dummy-data/nextcloud/status.php
Normal file
10
dummy-data/nextcloud/status.php
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"installed": true,
|
||||
"maintenance": false,
|
||||
"needsDbUpgrade": false,
|
||||
"version": "28.0.2.1",
|
||||
"versionstring": "28.0.2",
|
||||
"edition": "",
|
||||
"productname": "Nextcloud",
|
||||
"extendedSupport": false
|
||||
}
|
||||
30
dummy-data/octoprint/api/job
Normal file
30
dummy-data/octoprint/api/job
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"job": {
|
||||
"averagePrintTime": 669.3131185749999,
|
||||
"estimatedPrintTime": 314.87566979223726,
|
||||
"filament": {
|
||||
"tool0": {
|
||||
"length": 134.81171000000032,
|
||||
"volume": 0.0
|
||||
}
|
||||
},
|
||||
"file": {
|
||||
"date": 1665547748,
|
||||
"display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"origin": "local",
|
||||
"path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"size": 129581
|
||||
},
|
||||
"lastPrintTime": 669.3131185749999,
|
||||
"user": "friendlyngeeks"
|
||||
},
|
||||
"progress": {
|
||||
"completion": 27.456185706237797,
|
||||
"filepos": 35578,
|
||||
"printTime": 460,
|
||||
"printTimeLeft": 4612,
|
||||
"printTimeLeftOrigin": "linear"
|
||||
},
|
||||
"state": "Printing"
|
||||
}
|
||||
27
dummy-data/octoprint/api/printer
Normal file
27
dummy-data/octoprint/api/printer
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"temperature": {
|
||||
"bed": {
|
||||
"actual": 20.52,
|
||||
"offset": 0,
|
||||
"target": 0.0
|
||||
},
|
||||
"tool0": {
|
||||
"actual": 20.44,
|
||||
"offset": 0,
|
||||
"target": 0.0
|
||||
}
|
||||
},
|
||||
"state": {
|
||||
"text": "Operational",
|
||||
"flags": {
|
||||
"operational": true,
|
||||
"paused": false,
|
||||
"printing": false,
|
||||
"cancelling": false,
|
||||
"pausing": false,
|
||||
"error": false,
|
||||
"ready": true,
|
||||
"closedOrError": false
|
||||
}
|
||||
}
|
||||
}
|
||||
26
dummy-data/octoprint/api/status_printer_offline-error.json
Normal file
26
dummy-data/octoprint/api/status_printer_offline-error.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"error": "SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)",
|
||||
"job": {
|
||||
"averagePrintTime": null,
|
||||
"estimatedPrintTime": null,
|
||||
"filament": null,
|
||||
"file": {
|
||||
"date": null,
|
||||
"display": null,
|
||||
"name": null,
|
||||
"origin": null,
|
||||
"path": null,
|
||||
"size": null
|
||||
},
|
||||
"lastPrintTime": null,
|
||||
"user": null
|
||||
},
|
||||
"progress": {
|
||||
"completion": null,
|
||||
"filepos": null,
|
||||
"printTime": null,
|
||||
"printTimeLeft": null,
|
||||
"printTimeLeftOrigin": null
|
||||
},
|
||||
"state": "Offline after error"
|
||||
}
|
||||
26
dummy-data/octoprint/api/status_printer_offline.json
Normal file
26
dummy-data/octoprint/api/status_printer_offline.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"job": {
|
||||
"estimatedPrintTime": null,
|
||||
"filament": {
|
||||
"length": null,
|
||||
"volume": null
|
||||
},
|
||||
"file": {
|
||||
"date": null,
|
||||
"name": null,
|
||||
"origin": null,
|
||||
"path": null,
|
||||
"size": null
|
||||
},
|
||||
"lastPrintTime": null,
|
||||
"user": null
|
||||
},
|
||||
"progress": {
|
||||
"completion": null,
|
||||
"filepos": null,
|
||||
"printTime": null,
|
||||
"printTimeLeft": null,
|
||||
"printTimeOrigin": null
|
||||
},
|
||||
"state": "Offline"
|
||||
}
|
||||
26
dummy-data/octoprint/api/status_printer_operational.json
Normal file
26
dummy-data/octoprint/api/status_printer_operational.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"job": {
|
||||
"estimatedPrintTime": null,
|
||||
"filament": {
|
||||
"length": null,
|
||||
"volume": null
|
||||
},
|
||||
"file": {
|
||||
"date": null,
|
||||
"name": null,
|
||||
"origin": null,
|
||||
"path": null,
|
||||
"size": null
|
||||
},
|
||||
"lastPrintTime": null,
|
||||
"user": null
|
||||
},
|
||||
"progress": {
|
||||
"completion": null,
|
||||
"filepos": null,
|
||||
"printTime": null,
|
||||
"printTimeLeft": null,
|
||||
"printTimeOrigin": null
|
||||
},
|
||||
"state": "Operational"
|
||||
}
|
||||
30
dummy-data/octoprint/api/status_printer_printing.json
Normal file
30
dummy-data/octoprint/api/status_printer_printing.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"job": {
|
||||
"averagePrintTime": 669.3131185749999,
|
||||
"estimatedPrintTime": 314.87566979223726,
|
||||
"filament": {
|
||||
"tool0": {
|
||||
"length": 134.81171000000032,
|
||||
"volume": 0.0
|
||||
}
|
||||
},
|
||||
"file": {
|
||||
"date": 1665547748,
|
||||
"display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"origin": "local",
|
||||
"path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"size": 129581
|
||||
},
|
||||
"lastPrintTime": 669.3131185749999,
|
||||
"user": "friendlyngeeks"
|
||||
},
|
||||
"progress": {
|
||||
"completion": 0.1551153332664511,
|
||||
"filepos": 201,
|
||||
"printTime": 0,
|
||||
"printTimeLeft": 668,
|
||||
"printTimeLeftOrigin": "average"
|
||||
},
|
||||
"state": "Printing"
|
||||
}
|
||||
30
dummy-data/octoprint/api/status_printer_printing_1of2.json
Normal file
30
dummy-data/octoprint/api/status_printer_printing_1of2.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"job": {
|
||||
"averagePrintTime": 669.3131185749999,
|
||||
"estimatedPrintTime": 314.87566979223726,
|
||||
"filament": {
|
||||
"tool0": {
|
||||
"length": 134.81171000000032,
|
||||
"volume": 0.0
|
||||
}
|
||||
},
|
||||
"file": {
|
||||
"date": 1665547748,
|
||||
"display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"origin": "local",
|
||||
"path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"size": 129581
|
||||
},
|
||||
"lastPrintTime": 669.3131185749999,
|
||||
"user": "friendlyngeeks"
|
||||
},
|
||||
"progress": {
|
||||
"completion": 0.1551153332664511,
|
||||
"filepos": 201,
|
||||
"printTime": 0,
|
||||
"printTimeLeft": 668,
|
||||
"printTimeLeftOrigin": "average"
|
||||
},
|
||||
"state": "Printing"
|
||||
}
|
||||
30
dummy-data/octoprint/api/status_printer_printing_2of2.json
Normal file
30
dummy-data/octoprint/api/status_printer_printing_2of2.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"job": {
|
||||
"averagePrintTime": 669.3131185749999,
|
||||
"estimatedPrintTime": 314.87566979223726,
|
||||
"filament": {
|
||||
"tool0": {
|
||||
"length": 134.81171000000032,
|
||||
"volume": 0.0
|
||||
}
|
||||
},
|
||||
"file": {
|
||||
"date": 1665547748,
|
||||
"display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"origin": "local",
|
||||
"path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"size": 129581
|
||||
},
|
||||
"lastPrintTime": 669.3131185749999,
|
||||
"user": "friendlyngeeks"
|
||||
},
|
||||
"progress": {
|
||||
"completion": 27.456185706237797,
|
||||
"filepos": 35578,
|
||||
"printTime": 476,
|
||||
"printTimeLeft": 1612,
|
||||
"printTimeLeftOrigin": "linear"
|
||||
},
|
||||
"state": "Printing"
|
||||
}
|
||||
30
dummy-data/octoprint/api/status_printing_completion.json
Normal file
30
dummy-data/octoprint/api/status_printing_completion.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"job": {
|
||||
"averagePrintTime": 698.814525153,
|
||||
"estimatedPrintTime": 314.87566979223726,
|
||||
"filament": {
|
||||
"tool0": {
|
||||
"length": 134.81171000000032,
|
||||
"volume": 0.0
|
||||
}
|
||||
},
|
||||
"file": {
|
||||
"date": 1665547748,
|
||||
"display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"origin": "local",
|
||||
"path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
|
||||
"size": 129581
|
||||
},
|
||||
"lastPrintTime": 728.315931731,
|
||||
"user": "friendlyngeeks"
|
||||
},
|
||||
"progress": {
|
||||
"completion": 100.0,
|
||||
"filepos": 129581,
|
||||
"printTime": 728,
|
||||
"printTimeLeft": 0,
|
||||
"printTimeLeftOrigin": null
|
||||
},
|
||||
"state": "Operational"
|
||||
}
|
||||
18
dummy-data/olivetin/webUiSettings.json
Normal file
18
dummy-data/olivetin/webUiSettings.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"Rest": "./api/",
|
||||
"ShowFooter": true,
|
||||
"ShowNavigation": true,
|
||||
"ShowNewVersions": true,
|
||||
"AvailableVersion": "none",
|
||||
"CurrentVersion": "2024.11.24",
|
||||
"PageTitle": "OliveTin",
|
||||
"SectionNavigationStyle": "sidebar",
|
||||
"DefaultIconForBack": "«",
|
||||
"SshFoundKey": "not found at /home/user/.ssh/id_rsa",
|
||||
"SshFoundConfig": "not found at /home/user/.ssh/config",
|
||||
"EnableCustomJs": false,
|
||||
"AuthLoginUrl": "",
|
||||
"AuthLocalLogin": false,
|
||||
"AuthOAuth2Providers": null,
|
||||
"AdditionalLinks": null
|
||||
}
|
||||
18
dummy-data/openHAB/rest/systeminfo
Normal file
18
dummy-data/openHAB/rest/systeminfo
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"systemInfo": {
|
||||
"configFolder": "/etc/openhab",
|
||||
"userdataFolder": "/var/lib/openhab",
|
||||
"logFolder": "/var/log/openhab",
|
||||
"javaVersion": "17.0.9",
|
||||
"javaVendor": "Azul Systems, Inc.",
|
||||
"javaVendorVersion": "Zulu17.46+19-CA",
|
||||
"osName": "Linux",
|
||||
"osVersion": "6.5.11-4-pve",
|
||||
"osArchitecture": "amd64",
|
||||
"availableProcessors": 2,
|
||||
"freeMemory": 75885968,
|
||||
"totalMemory": 494927872,
|
||||
"uptime": 2150186,
|
||||
"startLevel": 100
|
||||
}
|
||||
}
|
||||
43
dummy-data/openweather/weather
Normal file
43
dummy-data/openweather/weather
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"coord": {
|
||||
"lon": 3.0586,
|
||||
"lat": 50.633
|
||||
},
|
||||
"weather": [
|
||||
{
|
||||
"id": 800,
|
||||
"main": "Clear",
|
||||
"description": "clear sky",
|
||||
"icon": "01d"
|
||||
}
|
||||
],
|
||||
"base": "stations",
|
||||
"main": {
|
||||
"temp": 287.38,
|
||||
"feels_like": 286.76,
|
||||
"temp_min": 286.38,
|
||||
"temp_max": 287.71,
|
||||
"pressure": 1019,
|
||||
"humidity": 73
|
||||
},
|
||||
"visibility": 10000,
|
||||
"wind": {
|
||||
"speed": 3.09,
|
||||
"deg": 30
|
||||
},
|
||||
"clouds": {
|
||||
"all": 0
|
||||
},
|
||||
"dt": 1718867378,
|
||||
"sys": {
|
||||
"type": 2,
|
||||
"id": 2011132,
|
||||
"country": "FR",
|
||||
"sunrise": 1718854500,
|
||||
"sunset": 1718913826
|
||||
},
|
||||
"timezone": 7200,
|
||||
"id": 2998324,
|
||||
"name": "Lille",
|
||||
"cod": 200
|
||||
}
|
||||
88
dummy-data/paperlessng/api/documents
Normal file
88
dummy-data/paperlessng/api/documents
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
{
|
||||
"count": 1847,
|
||||
"next": "http://paperless.local/api/documents/?page=2",
|
||||
"previous": null,
|
||||
"all": [1, 2, 3, 4, 5],
|
||||
"results": [
|
||||
{
|
||||
"id": 1847,
|
||||
"correspondent": 15,
|
||||
"document_type": 12,
|
||||
"storage_path": null,
|
||||
"title": "Bank Statement - January 2024",
|
||||
"content": "Monthly bank statement with account summary and transaction details",
|
||||
"tags": [8, 15, 23],
|
||||
"created": "2024-01-15T10:30:00Z",
|
||||
"created_date": "2024-01-15",
|
||||
"modified": "2024-01-15T10:30:00Z",
|
||||
"added": "2024-01-15T10:30:00Z",
|
||||
"archive_serial_number": "ASN2024001847",
|
||||
"original_file_name": "bank_statement_202401.pdf",
|
||||
"archived_file_name": "0001847.pdf"
|
||||
},
|
||||
{
|
||||
"id": 1846,
|
||||
"correspondent": 23,
|
||||
"document_type": 5,
|
||||
"storage_path": null,
|
||||
"title": "Utility Bill - Electric Company",
|
||||
"content": "Monthly electricity bill for December 2023",
|
||||
"tags": [12, 18],
|
||||
"created": "2024-01-14T16:45:00Z",
|
||||
"created_date": "2024-01-14",
|
||||
"modified": "2024-01-14T16:45:00Z",
|
||||
"added": "2024-01-14T16:45:00Z",
|
||||
"archive_serial_number": "ASN2024001846",
|
||||
"original_file_name": "electric_bill_202312.pdf",
|
||||
"archived_file_name": "0001846.pdf"
|
||||
},
|
||||
{
|
||||
"id": 1845,
|
||||
"correspondent": 7,
|
||||
"document_type": 18,
|
||||
"storage_path": null,
|
||||
"title": "Insurance Policy Renewal Notice",
|
||||
"content": "Annual home insurance policy renewal documentation",
|
||||
"tags": [5, 11, 19],
|
||||
"created": "2024-01-13T14:20:00Z",
|
||||
"created_date": "2024-01-13",
|
||||
"modified": "2024-01-13T14:20:00Z",
|
||||
"added": "2024-01-13T14:20:00Z",
|
||||
"archive_serial_number": "ASN2024001845",
|
||||
"original_file_name": "insurance_renewal_2024.pdf",
|
||||
"archived_file_name": "0001845.pdf"
|
||||
},
|
||||
{
|
||||
"id": 1844,
|
||||
"correspondent": 31,
|
||||
"document_type": 9,
|
||||
"storage_path": null,
|
||||
"title": "Tax Document - W2 Form 2023",
|
||||
"content": "Annual W2 tax form from employer",
|
||||
"tags": [2, 14, 25],
|
||||
"created": "2024-01-12T09:15:00Z",
|
||||
"created_date": "2024-01-12",
|
||||
"modified": "2024-01-12T09:15:00Z",
|
||||
"added": "2024-01-12T09:15:00Z",
|
||||
"archive_serial_number": "ASN2024001844",
|
||||
"original_file_name": "w2_form_2023.pdf",
|
||||
"archived_file_name": "0001844.pdf"
|
||||
},
|
||||
{
|
||||
"id": 1843,
|
||||
"correspondent": 42,
|
||||
"document_type": 21,
|
||||
"storage_path": null,
|
||||
"title": "Medical Records - Annual Checkup",
|
||||
"content": "Annual physical examination results and health summary",
|
||||
"tags": [6, 17, 28],
|
||||
"created": "2024-01-11T11:30:00Z",
|
||||
"created_date": "2024-01-11",
|
||||
"modified": "2024-01-11T11:30:00Z",
|
||||
"added": "2024-01-11T11:30:00Z",
|
||||
"archive_serial_number": "ASN2024001843",
|
||||
"original_file_name": "medical_checkup_2024.pdf",
|
||||
"archived_file_name": "0001843.pdf"
|
||||
}
|
||||
]
|
||||
}
|
||||
30
dummy-data/peanut/api/v1/devices/ups
Normal file
30
dummy-data/peanut/api/v1/devices/ups
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"battery.charge": 100,
|
||||
"battery.voltage": 13,
|
||||
"battery.voltage.high": 13,
|
||||
"battery.voltage.low": 10,
|
||||
"battery.voltage.nominal": 12,
|
||||
"device.type": "ups",
|
||||
"driver.flag.noscanlangid": "enabled",
|
||||
"driver.flag.novendor": "enabled",
|
||||
"driver.name": "nutdrv_qx",
|
||||
"driver.parameter.langid_fix": 1000,
|
||||
"driver.parameter.pollfreq": 30,
|
||||
"driver.parameter.pollinterval": 2,
|
||||
"driver.parameter.vendorid": 1,
|
||||
"driver.version": "2.8.0",
|
||||
"input.frequency": 50,
|
||||
"input.frequency.nominal": "0",
|
||||
"input.voltage": 228,
|
||||
"input.voltage.fault": "0.0",
|
||||
"input.voltage.nominal": "0",
|
||||
"output.voltage": 228,
|
||||
"ups.beeper.status": "disabled",
|
||||
"ups.delay.shutdown": 60,
|
||||
"ups.delay.start": "0",
|
||||
"ups.load": 50,
|
||||
"ups.productid": "0000",
|
||||
"ups.status": "OL",
|
||||
"ups.temperature": 30,
|
||||
"ups.type": "offline / line interactive"
|
||||
}
|
||||
1
dummy-data/pialert/php/server/devices.php
Normal file
1
dummy-data/pialert/php/server/devices.php
Normal file
|
|
@ -0,0 +1 @@
|
|||
[89,82,0,15,0,0]
|
||||
38
dummy-data/pihole/api.php
Normal file
38
dummy-data/pihole/api.php
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"domains_being_blocked": 152588,
|
||||
"dns_queries_today": 0,
|
||||
"ads_blocked_today": 0,
|
||||
"percent_blocked": 42,
|
||||
"unique_domains": 0,
|
||||
"queries_forwarded": 0,
|
||||
"queries_cached": 0,
|
||||
"clients_ever_seen": 0,
|
||||
"unique_clients": 0,
|
||||
"dns_queries_all_types": 0,
|
||||
"reply_UNKNOWN": 0,
|
||||
"reply_NODATA": 0,
|
||||
"reply_NXDOMAIN": 0,
|
||||
"reply_CNAME": 0,
|
||||
"reply_IP": 0,
|
||||
"reply_DOMAIN": 0,
|
||||
"reply_RRNAME": 0,
|
||||
"reply_SERVFAIL": 0,
|
||||
"reply_REFUSED": 0,
|
||||
"reply_NOTIMP": 0,
|
||||
"reply_OTHER": 0,
|
||||
"reply_DNSSEC": 0,
|
||||
"reply_NONE": 0,
|
||||
"reply_BLOB": 0,
|
||||
"dns_queries_all_replies": 0,
|
||||
"privacy_level": 0,
|
||||
"status": "enabled",
|
||||
"gravity_last_updated": {
|
||||
"file_exists": true,
|
||||
"absolute": 1665486627,
|
||||
"relative": {
|
||||
"days": 0,
|
||||
"hours": 0,
|
||||
"minutes": 22
|
||||
}
|
||||
}
|
||||
}
|
||||
12
dummy-data/plex/library/sections
Normal file
12
dummy-data/plex/library/sections
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MediaContainer size="3" allowSync="1" art="/:/resources/show-fanart.jpg" identifier="com.plexapp.plugins.library" librarySectionID="0" mediaTagPrefix="/system/bundle/media/flags/" mediaTagVersion="1705317600" thumb="/:/resources/show.png" title1="Plex Library" viewGroup="secondary" viewMode="458752">
|
||||
<Directory allowSync="1" art="/:/resources/movie-fanart.jpg" composite="/library/sections/1/composite/1705317600" filters="1" refreshing="0" thumb="/:/resources/movie.png" key="1" type="movie" title="Movies" agent="com.plexapp.agents.themoviedb" scanner="Plex Movie" language="en-US" uuid="abcd1234-5678-90ab-cdef-123456789012" updatedAt="1705317600" createdAt="1704067200" scannedAt="1705317000" content="1" directory="1" contentChangedAt="1705316400" hidden="0">
|
||||
<Location id="1" path="/media/movies" />
|
||||
</Directory>
|
||||
<Directory allowSync="1" art="/:/resources/show-fanart.jpg" composite="/library/sections/2/composite/1705317600" filters="1" refreshing="0" thumb="/:/resources/show.png" key="2" type="show" title="TV Shows" agent="com.plexapp.agents.thetvdb" scanner="Plex TV Series" language="en-US" uuid="efgh5678-90ab-cdef-1234-567890abcdef" updatedAt="1705317600" createdAt="1704067200" scannedAt="1705317000" content="1" directory="1" contentChangedAt="1705316400" hidden="0">
|
||||
<Location id="2" path="/media/tv" />
|
||||
</Directory>
|
||||
<Directory allowSync="1" art="/:/resources/artist-fanart.jpg" composite="/library/sections/3/composite/1705317600" filters="1" refreshing="0" thumb="/:/resources/artist.png" key="3" type="artist" title="Music" agent="com.plexapp.agents.lastfm" scanner="Plex Music" language="en-US" uuid="ijkl9012-3456-789a-bcde-f0123456789a" updatedAt="1705317600" createdAt="1704067200" scannedAt="1705317000" content="1" directory="1" contentChangedAt="1705316400" hidden="0">
|
||||
<Location id="3" path="/media/music" />
|
||||
</Directory>
|
||||
</MediaContainer>
|
||||
7
dummy-data/plex/library/sections1all
Normal file
7
dummy-data/plex/library/sections1all
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MediaContainer size="247" allowSync="1" art="/:/resources/movie-fanart.jpg" identifier="com.plexapp.plugins.library" librarySectionID="1" librarySectionTitle="Movies" librarySectionUUID="abcd1234-5678-90ab-cdef-123456789012" mediaTagPrefix="/system/bundle/media/flags/" mediaTagVersion="1705317600" mixedParents="0" nocache="1" offset="0" thumb="/:/resources/movie.png" title1="Movies" title2="All Movies" totalSize="247" viewGroup="movie" viewMode="458752">
|
||||
<Video ratingKey="1001" key="/library/metadata/1001" guid="plex://movie/5d9c086fe98e47001e0d5001" type="movie" title="Inception" titleSort="Inception" contentRating="PG-13" summary="A thief who steals corporate secrets through dream-sharing technology." rating="8.8" audienceRating="9.1" year="2010" tagline="Your mind is the scene of the crime" thumb="/library/metadata/1001/thumb/1705317600" art="/library/metadata/1001/art/1705317600" duration="8880000" originallyAvailableAt="2010-07-16" addedAt="1705144800" updatedAt="1705317600">
|
||||
<Media id="2001" duration="8880000" bitrate="12000" width="1920" height="1080" aspectRatio="1.78" audioChannels="6" audioCodec="dts" videoCodec="h264" videoResolution="1080" container="mkv" videoFrameRate="24p" audioProfile="dts" videoProfile="high" />
|
||||
</Video>
|
||||
<!-- 246 more movies would be here, showing just one for brevity -->
|
||||
</MediaContainer>
|
||||
13
dummy-data/plex/library/sections2all
Normal file
13
dummy-data/plex/library/sections2all
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MediaContainer size="89" allowSync="1" art="/:/resources/show-fanart.jpg" identifier="com.plexapp.plugins.library" librarySectionID="2" librarySectionTitle="TV Shows" librarySectionUUID="efgh5678-90ab-cdef-1234-567890abcdef" mediaTagPrefix="/system/bundle/media/flags/" mediaTagVersion="1705317600" mixedParents="0" nocache="1" offset="0" thumb="/:/resources/show.png" title1="TV Shows" title2="All Shows" totalSize="89" viewGroup="show" viewMode="458752">
|
||||
<Directory ratingKey="2001" key="/library/metadata/2001" guid="plex://show/5d9c081fe98e47001e0c2001" type="show" title="Breaking Bad" titleSort="Breaking Bad" contentRating="TV-MA" summary="A high school chemistry teacher diagnosed with inoperable lung cancer turns to manufacturing and selling methamphetamine in order to secure his family's future." rating="9.5" year="2008" thumb="/library/metadata/2001/thumb/1705317600" art="/library/metadata/2001/art/1705317600" banner="/library/metadata/2001/banner/1705317600" duration="2820000" originallyAvailableAt="2008-01-20" leafCount="62" viewedLeafCount="62" childCount="5" addedAt="1705144800" updatedAt="1705317600">
|
||||
<Genre tag="Crime" />
|
||||
<Genre tag="Drama" />
|
||||
<Genre tag="Thriller" />
|
||||
</Directory>
|
||||
<Directory ratingKey="2002" key="/library/metadata/2002" guid="plex://show/5d9c081fe98e47001e0c2002" type="show" title="Friends" titleSort="Friends" contentRating="TV-14" summary="Follows the personal and professional lives of six twenty to thirty-something-year-old friends living in Manhattan." rating="8.9" year="1994" thumb="/library/metadata/2002/thumb/1705317600" art="/library/metadata/2002/art/1705317600" banner="/library/metadata/2002/banner/1705317600" duration="1320000" originallyAvailableAt="1994-09-22" leafCount="236" viewedLeafCount="236" childCount="10" addedAt="1705144800" updatedAt="1705317600">
|
||||
<Genre tag="Comedy" />
|
||||
<Genre tag="Romance" />
|
||||
</Directory>
|
||||
<!-- 87 more shows would be here, showing just two for brevity -->
|
||||
</MediaContainer>
|
||||
19
dummy-data/plex/status/sessions
Normal file
19
dummy-data/plex/status/sessions
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MediaContainer size="2" allowCameraUpload="1" allowChannelAccess="1" allowMediaDeletion="1" allowSharing="1" allowSync="1" backgroundProcessing="1" certificateVersion="2" companionProxy="1" countryCode="US" diagnostics="logs,databases,streaminglogs" eventStream="1" friendlyName="Homer-Plex-Server" hubSearch="1" itemClusters="1" livenessTimeout="0" machineIdentifier="abc123def456ghi789jkl012" mediaProviders="1" multiuser="1" myPlex="1" myPlexMappingState="mapped" myPlexSigninState="ok" myPlexSubscription="1" myPlexUsername="homer@example.com" offlineTranscode="1" ownerFeatures="adaptive_bitrate,collections,content_filter,dvr,hardware_transcoding,home,loudness_analysis,music_videos,pass,photo_autotags,premium_music_metadata,session_bandwidth_restrictions,sync,trailers,webhooks" photoAutoTag="1" platform="Linux" platformVersion="6.5.0-15-generic" pluginHost="1" pushNotifications="1" readOnlyLibraries="1" requestParametersInCookie="1" streamingBrainABRVersion="3" streamingBrainVersion="2" sync="1" transcoderActiveVideoSessions="0" transcoderAudio="1" transcoderLyrics="1" transcoderPhoto="1" transcoderSubtitles="1" transcoderVideo="1" transcoderVideoBitrates="64,96,208,320,720,1500,2000,3000,4000,8000,10000,12000,20000" transcoderVideoQualities="0,1,2,3,4,5,6,7,8,9,10,11,12" transcoderVideoResolutions="128,128,160,240,320,480,768,720,720,1080,1080,1080,1080" updatedAt="1705317600" updater="1" version="1.40.1.8227-c0dd5a73e" voiceSearch="1">
|
||||
<Video sessionKey="1" key="/library/metadata/12345" parentKey="/library/metadata/12300" grandparentKey="/library/metadata/12000" guid="plex://episode/5d9c086fe98e47001e0d5c3f" parentGuid="plex://season/602e67d31d3358002d2fb2bd" grandparentGuid="plex://show/5d9c081fe98e47001e0c8382" type="episode" title="The One Where Monica Gets a Roommate" titleSort="One Where Monica Gets a Roommate, The" grandparentTitle="Friends" parentTitle="Season 1" contentRating="TV-14" summary="Monica and the gang introduce Rachel to the real world after she leaves her fiancé at the altar." index="1" parentIndex="1" lastViewedAt="1705315800" year="1994" thumb="/library/metadata/12345/thumb/1705317600" art="/library/metadata/12000/art/1705317600" parentThumb="/library/metadata/12300/thumb/1705317600" grandparentThumb="/library/metadata/12000/thumb/1705317600" grandparentArt="/library/metadata/12000/art/1705317600" duration="1380000" originallyAvailableAt="1994-09-22" addedAt="1705230400" updatedAt="1705317600" chapterSource="media" primaryExtraKey="/library/metadata/12346" ratingKey="12345" viewOffset="420000" skipCount="1">
|
||||
<Media id="67890" duration="1380000" bitrate="8137" width="1920" height="1080" aspectRatio="1.78" audioChannels="2" audioCodec="aac" videoCodec="h264" videoResolution="1080" container="mkv" videoFrameRate="24p" audioProfile="lc" videoProfile="high">
|
||||
<Part accessible="1" exists="1" id="98765" key="/library/parts/98765/1705317600/file.mkv" duration="1380000" file="/media/tv/Friends/Season 01/Friends - S01E01 - The One Where Monica Gets a Roommate.mkv" size="1398101419" audioProfile="lc" container="mkv" indexes="sd" videoProfile="high" />
|
||||
</Media>
|
||||
<User id="1" thumb="https://plex.tv/users/abc123def456/avatar?c=1705317600" title="John Doe" />
|
||||
<Player address="192.168.1.100" device="Chrome" machineIdentifier="browser-chrome-192-168-1-100" model="hosted" platform="Chrome" platformVersion="120" product="Plex Web" profile="Web" remotePublicAddress="203.0.113.1" state="playing" title="Chrome (John's Desktop)" userID="1" vendor="Google" version="4.126.1" />
|
||||
<Session id="session123abc" bandwidth="8000" location="lan" />
|
||||
</Video>
|
||||
<Video sessionKey="2" key="/library/metadata/54321" guid="plex://movie/5d9c086fe98e47001e0d5c4a" type="movie" title="The Matrix" titleSort="Matrix, The" contentRating="R" summary="A computer hacker learns from mysterious rebels about the true nature of his reality and his role in the war against its controllers." rating="8.7" year="1999" tagline="The fight for the future begins" thumb="/library/metadata/54321/thumb/1705317600" art="/library/metadata/54321/art/1705317600" duration="8160000" originallyAvailableAt="1999-03-31" addedAt="1705144800" updatedAt="1705317600" chapterSource="media" ratingKey="54321" viewOffset="2100000">
|
||||
<Media id="11223" duration="8160000" bitrate="15463" width="1920" height="816" aspectRatio="2.35" audioChannels="6" audioCodec="dts" videoCodec="h264" videoResolution="1080" container="mkv" videoFrameRate="24p" audioProfile="dts" videoProfile="high">
|
||||
<Part accessible="1" exists="1" id="33445" key="/library/parts/33445/1705317600/file.mkv" duration="8160000" file="/media/movies/The Matrix (1999)/The Matrix (1999).mkv" size="15758698701" audioProfile="dts" container="mkv" indexes="sd" videoProfile="high" />
|
||||
</Media>
|
||||
<User id="2" thumb="https://plex.tv/users/def456ghi789/avatar?c=1705317600" title="Jane Smith" />
|
||||
<Player address="192.168.1.101" device="Android" machineIdentifier="android-phone-samsung" model="SM-G991B" platform="Android" platformVersion="14" product="Plex for Android" profile="Mobile" remotePublicAddress="203.0.113.2" state="paused" title="Samsung Galaxy S21" userID="2" vendor="Samsung" version="9.8.1" />
|
||||
<Session id="session456def" bandwidth="4000" location="lan" />
|
||||
</Video>
|
||||
</MediaContainer>
|
||||
94
dummy-data/portainer/api/endpoints
Normal file
94
dummy-data/portainer/api/endpoints
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
[
|
||||
{
|
||||
"Id": 1,
|
||||
"Name": "local",
|
||||
"Type": 1,
|
||||
"URL": "unix:///var/run/docker.sock",
|
||||
"GroupId": 1,
|
||||
"PublicURL": "",
|
||||
"Status": 1,
|
||||
"UserAccessPolicies": {},
|
||||
"TeamAccessPolicies": {},
|
||||
"Extensions": [],
|
||||
"TagIds": [],
|
||||
"AssociatedEndpoints": [],
|
||||
"Snapshots": [
|
||||
{
|
||||
"Time": 1705317600,
|
||||
"DockerVersion": "24.0.7",
|
||||
"Swarm": false,
|
||||
"TotalCPU": 8,
|
||||
"TotalMemory": 16777216000,
|
||||
"RunningContainerCount": 12,
|
||||
"StoppedContainerCount": 5,
|
||||
"HealthyContainerCount": 10,
|
||||
"UnhealthyContainerCount": 0,
|
||||
"VolumeCount": 25,
|
||||
"ImageCount": 47,
|
||||
"ServiceCount": 0,
|
||||
"StackCount": 0,
|
||||
"DockerRootDir": "/var/lib/docker"
|
||||
}
|
||||
],
|
||||
"Kubernetes": {
|
||||
"Snapshots": []
|
||||
},
|
||||
"Agent": {
|
||||
"NodeName": "",
|
||||
"ChecklnInterval": 5,
|
||||
"Version": ""
|
||||
},
|
||||
"Edge": {
|
||||
"AsyncMode": false,
|
||||
"PingInterval": 60,
|
||||
"CommandInterval": 5,
|
||||
"SnapshotInterval": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"Id": 2,
|
||||
"Name": "production",
|
||||
"Type": 2,
|
||||
"URL": "tcp://prod-docker:2376",
|
||||
"GroupId": 1,
|
||||
"PublicURL": "https://prod-docker.example.com",
|
||||
"Status": 1,
|
||||
"UserAccessPolicies": {},
|
||||
"TeamAccessPolicies": {},
|
||||
"Extensions": [],
|
||||
"TagIds": [],
|
||||
"AssociatedEndpoints": [],
|
||||
"Snapshots": [
|
||||
{
|
||||
"Time": 1705317600,
|
||||
"DockerVersion": "24.0.7",
|
||||
"Swarm": false,
|
||||
"TotalCPU": 16,
|
||||
"TotalMemory": 33554432000,
|
||||
"RunningContainerCount": 25,
|
||||
"StoppedContainerCount": 3,
|
||||
"HealthyContainerCount": 23,
|
||||
"UnhealthyContainerCount": 2,
|
||||
"VolumeCount": 40,
|
||||
"ImageCount": 75,
|
||||
"ServiceCount": 0,
|
||||
"StackCount": 0,
|
||||
"DockerRootDir": "/var/lib/docker"
|
||||
}
|
||||
],
|
||||
"Kubernetes": {
|
||||
"Snapshots": []
|
||||
},
|
||||
"Agent": {
|
||||
"NodeName": "",
|
||||
"ChecklnInterval": 5,
|
||||
"Version": ""
|
||||
},
|
||||
"Edge": {
|
||||
"AsyncMode": false,
|
||||
"PingInterval": 60,
|
||||
"CommandInterval": 5,
|
||||
"SnapshotInterval": 5
|
||||
}
|
||||
}
|
||||
]
|
||||
94
dummy-data/portainer/api/endpoints.backup
Normal file
94
dummy-data/portainer/api/endpoints.backup
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
[
|
||||
{
|
||||
"Id": 1,
|
||||
"Name": "local",
|
||||
"Type": 1,
|
||||
"URL": "unix:///var/run/docker.sock",
|
||||
"GroupId": 1,
|
||||
"PublicURL": "",
|
||||
"Status": 1,
|
||||
"UserAccessPolicies": {},
|
||||
"TeamAccessPolicies": {},
|
||||
"Extensions": [],
|
||||
"TagIds": [],
|
||||
"AssociatedEndpoints": [],
|
||||
"Snapshots": [
|
||||
{
|
||||
"Time": 1705317600,
|
||||
"DockerVersion": "24.0.7",
|
||||
"Swarm": false,
|
||||
"TotalCPU": 8,
|
||||
"TotalMemory": 16777216000,
|
||||
"RunningContainerCount": 12,
|
||||
"StoppedContainerCount": 5,
|
||||
"HealthyContainerCount": 10,
|
||||
"UnhealthyContainerCount": 0,
|
||||
"VolumeCount": 25,
|
||||
"ImageCount": 47,
|
||||
"ServiceCount": 0,
|
||||
"StackCount": 0,
|
||||
"DockerRootDir": "/var/lib/docker"
|
||||
}
|
||||
],
|
||||
"Kubernetes": {
|
||||
"Snapshots": []
|
||||
},
|
||||
"Agent": {
|
||||
"NodeName": "",
|
||||
"ChecklnInterval": 5,
|
||||
"Version": ""
|
||||
},
|
||||
"Edge": {
|
||||
"AsyncMode": false,
|
||||
"PingInterval": 60,
|
||||
"CommandInterval": 5,
|
||||
"SnapshotInterval": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"Id": 2,
|
||||
"Name": "production",
|
||||
"Type": 2,
|
||||
"URL": "tcp://prod-docker:2376",
|
||||
"GroupId": 1,
|
||||
"PublicURL": "https://prod-docker.example.com",
|
||||
"Status": 1,
|
||||
"UserAccessPolicies": {},
|
||||
"TeamAccessPolicies": {},
|
||||
"Extensions": [],
|
||||
"TagIds": [],
|
||||
"AssociatedEndpoints": [],
|
||||
"Snapshots": [
|
||||
{
|
||||
"Time": 1705317600,
|
||||
"DockerVersion": "24.0.7",
|
||||
"Swarm": false,
|
||||
"TotalCPU": 16,
|
||||
"TotalMemory": 33554432000,
|
||||
"RunningContainerCount": 25,
|
||||
"StoppedContainerCount": 3,
|
||||
"HealthyContainerCount": 23,
|
||||
"UnhealthyContainerCount": 2,
|
||||
"VolumeCount": 40,
|
||||
"ImageCount": 75,
|
||||
"ServiceCount": 0,
|
||||
"StackCount": 0,
|
||||
"DockerRootDir": "/var/lib/docker"
|
||||
}
|
||||
],
|
||||
"Kubernetes": {
|
||||
"Snapshots": []
|
||||
},
|
||||
"Agent": {
|
||||
"NodeName": "",
|
||||
"ChecklnInterval": 5,
|
||||
"Version": ""
|
||||
},
|
||||
"Edge": {
|
||||
"AsyncMode": false,
|
||||
"PingInterval": 60,
|
||||
"CommandInterval": 5,
|
||||
"SnapshotInterval": 5
|
||||
}
|
||||
}
|
||||
]
|
||||
38
dummy-data/portainer/api/status
Normal file
38
dummy-data/portainer/api/status
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"Version": "2.19.4",
|
||||
"APIVersion": "2.19.4",
|
||||
"DatabaseVersion": "34",
|
||||
"Build": {
|
||||
"BuildNumber": "1234567890",
|
||||
"ImageTag": "2.19.4-alpine",
|
||||
"NodejsVersion": "v18.17.1",
|
||||
"YarnVersion": "1.22.19",
|
||||
"WebpackVersion": "5.88.2",
|
||||
"GoVersion": "go1.21.5"
|
||||
},
|
||||
"InstanceID": "portainer-instance-abc123def456",
|
||||
"Edition": "CE",
|
||||
"DemoEnvironment": {
|
||||
"Enabled": false,
|
||||
"URL": ""
|
||||
},
|
||||
"AnalyticsEnabled": false,
|
||||
"AuthenticationMethod": 1,
|
||||
"Users": 3,
|
||||
"ValidLicense": false,
|
||||
"LicenseInfo": {
|
||||
"Company": "",
|
||||
"CreatedAt": 0,
|
||||
"ExpiresAt": 0,
|
||||
"LicenseKey": "",
|
||||
"ProductEdition": "",
|
||||
"Seats": 0,
|
||||
"Valid": false
|
||||
},
|
||||
"RequiredPasswordLength": 12,
|
||||
"UserSessionTimeout": "8h",
|
||||
"Features": {
|
||||
"EdgeDeviceUntrustedMode": false
|
||||
},
|
||||
"EdgeAgentCheckinIntervalSeconds": 5
|
||||
}
|
||||
99
dummy-data/prometheus/api/v1/alerts
Normal file
99
dummy-data/prometheus/api/v1/alerts
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
{
|
||||
"status": "success",
|
||||
"data": {
|
||||
"alerts": [
|
||||
{
|
||||
"labels": {
|
||||
"alertname": "HighCPUUsage",
|
||||
"instance": "localhost:9090",
|
||||
"job": "prometheus",
|
||||
"severity": "warning"
|
||||
},
|
||||
"annotations": {
|
||||
"description": "CPU usage is above 80% for more than 5 minutes",
|
||||
"summary": "High CPU usage detected"
|
||||
},
|
||||
"state": "firing",
|
||||
"activeAt": "2024-01-15T10:30:00.000Z",
|
||||
"value": "85.2"
|
||||
},
|
||||
{
|
||||
"labels": {
|
||||
"alertname": "HighMemoryUsage",
|
||||
"instance": "web-server-01:9090",
|
||||
"job": "node-exporter",
|
||||
"severity": "critical"
|
||||
},
|
||||
"annotations": {
|
||||
"description": "Memory usage is above 90% for more than 10 minutes",
|
||||
"summary": "Critical memory usage detected"
|
||||
},
|
||||
"state": "firing",
|
||||
"activeAt": "2024-01-15T10:25:00.000Z",
|
||||
"value": "92.8"
|
||||
},
|
||||
{
|
||||
"labels": {
|
||||
"alertname": "DiskSpaceLow",
|
||||
"instance": "db-server-01:9090",
|
||||
"job": "node-exporter",
|
||||
"severity": "warning",
|
||||
"device": "/dev/sda1"
|
||||
},
|
||||
"annotations": {
|
||||
"description": "Disk space is below 20% on {{ $labels.device }}",
|
||||
"summary": "Low disk space warning"
|
||||
},
|
||||
"state": "pending",
|
||||
"activeAt": "2024-01-15T11:00:00.000Z",
|
||||
"value": "18.5"
|
||||
},
|
||||
{
|
||||
"labels": {
|
||||
"alertname": "ServiceDown",
|
||||
"instance": "api-server-02:8080",
|
||||
"job": "api-health-check",
|
||||
"severity": "critical",
|
||||
"service": "user-api"
|
||||
},
|
||||
"annotations": {
|
||||
"description": "Service {{ $labels.service }} is not responding",
|
||||
"summary": "Service is down"
|
||||
},
|
||||
"state": "pending",
|
||||
"activeAt": "2024-01-15T11:10:00.000Z",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"labels": {
|
||||
"alertname": "DatabaseConnections",
|
||||
"instance": "db-server-01:5432",
|
||||
"job": "postgres-exporter",
|
||||
"severity": "info"
|
||||
},
|
||||
"annotations": {
|
||||
"description": "Database connection count is normal",
|
||||
"summary": "Database connections stable"
|
||||
},
|
||||
"state": "inactive",
|
||||
"activeAt": "2024-01-15T09:00:00.000Z",
|
||||
"value": "45"
|
||||
},
|
||||
{
|
||||
"labels": {
|
||||
"alertname": "HTTPResponseTime",
|
||||
"instance": "web-server-02:80",
|
||||
"job": "blackbox-exporter",
|
||||
"severity": "info"
|
||||
},
|
||||
"annotations": {
|
||||
"description": "HTTP response time is within acceptable limits",
|
||||
"summary": "Response time normal"
|
||||
},
|
||||
"state": "inactive",
|
||||
"activeAt": "2024-01-15T08:30:00.000Z",
|
||||
"value": "150"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
41
dummy-data/prowlarr/api/v1/health
Normal file
41
dummy-data/prowlarr/api/v1/health
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
[
|
||||
{
|
||||
"source": "IndexerStatusCheck",
|
||||
"type": "warning",
|
||||
"message": "Indexer 1337x has been disabled due to recent failures: Connection timeout after 30 seconds",
|
||||
"wikiUrl": "https://wiki.servarr.com/prowlarr/health#indexers-are-unavailable-due-to-recent-failures"
|
||||
},
|
||||
{
|
||||
"source": "IndexerRSSCheck",
|
||||
"type": "ok",
|
||||
"message": "All indexer RSS feeds are functioning normally"
|
||||
},
|
||||
{
|
||||
"source": "ApplicationStatusCheck",
|
||||
"type": "warning",
|
||||
"message": "Application Sonarr sync failed: Unable to connect to Sonarr at http://sonarr:8989",
|
||||
"wikiUrl": "https://wiki.servarr.com/prowlarr/health#applications-are-unavailable-due-to-recent-failures"
|
||||
},
|
||||
{
|
||||
"source": "UpdateCheck",
|
||||
"type": "ok",
|
||||
"message": "Update available: 1.11.4.4173 -> 1.12.2.4211"
|
||||
},
|
||||
{
|
||||
"source": "IndexerSearchCheck",
|
||||
"type": "error",
|
||||
"message": "Indexer TorrentLeech returned invalid search results: Malformed JSON response",
|
||||
"wikiUrl": "https://wiki.servarr.com/prowlarr/health#indexer-search-failures"
|
||||
},
|
||||
{
|
||||
"source": "ProxyCheck",
|
||||
"type": "ok",
|
||||
"message": "No proxy configuration issues detected"
|
||||
},
|
||||
{
|
||||
"source": "IndexerLongTermStatusCheck",
|
||||
"type": "warning",
|
||||
"message": "Indexer RARBG has been failing for more than 6 hours: HTTP 403 Forbidden",
|
||||
"wikiUrl": "https://wiki.servarr.com/prowlarr/health#indexers-are-unavailable-due-to-recent-failures"
|
||||
}
|
||||
]
|
||||
35
dummy-data/proxmox/api2/json/nodes/node1/lxc
Normal file
35
dummy-data/proxmox/api2/json/nodes/node1/lxc
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"data": [{
|
||||
"disk": 0,
|
||||
"mem": 983848043,
|
||||
"cpus": 2,
|
||||
"pid": 1218,
|
||||
"maxdisk": 107374182400,
|
||||
"netin": 43863882954,
|
||||
"diskread": 0,
|
||||
"diskwrite": 0,
|
||||
"name": "HAOS",
|
||||
"netout": 10426448652,
|
||||
"cpu": 0.00879886290177172,
|
||||
"uptime": 3390069,
|
||||
"status": "running",
|
||||
"maxmem": 3221225472,
|
||||
"vmid": 100
|
||||
}, {
|
||||
"cpu": 0.00219971572544293,
|
||||
"name": "debian1",
|
||||
"netout": 919020028,
|
||||
"vmid": 101,
|
||||
"maxmem": 4294967296,
|
||||
"uptime": 3390064,
|
||||
"status": "running",
|
||||
"maxdisk": 107374182400,
|
||||
"pid": 1295,
|
||||
"cpus": 2,
|
||||
"disk": 0,
|
||||
"mem": 2755160795,
|
||||
"diskread": 0,
|
||||
"diskwrite": 0,
|
||||
"netin": 5105600872
|
||||
}]
|
||||
}
|
||||
35
dummy-data/proxmox/api2/json/nodes/node1/qemu
Normal file
35
dummy-data/proxmox/api2/json/nodes/node1/qemu
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"data": [{
|
||||
"disk": 0,
|
||||
"mem": 983848043,
|
||||
"cpus": 2,
|
||||
"pid": 1218,
|
||||
"maxdisk": 107374182400,
|
||||
"netin": 43863882954,
|
||||
"diskread": 0,
|
||||
"diskwrite": 0,
|
||||
"name": "HAOS",
|
||||
"netout": 10426448652,
|
||||
"cpu": 0.00879886290177172,
|
||||
"uptime": 3390069,
|
||||
"status": "running",
|
||||
"maxmem": 3221225472,
|
||||
"vmid": 100
|
||||
}, {
|
||||
"cpu": 0.00219971572544293,
|
||||
"name": "debian1",
|
||||
"netout": 919020028,
|
||||
"vmid": 101,
|
||||
"maxmem": 4294967296,
|
||||
"uptime": 3390064,
|
||||
"status": "running",
|
||||
"maxdisk": 107374182400,
|
||||
"pid": 1295,
|
||||
"cpus": 2,
|
||||
"disk": 0,
|
||||
"mem": 2755160795,
|
||||
"diskread": 0,
|
||||
"diskwrite": 0,
|
||||
"netin": 5105600872
|
||||
}]
|
||||
}
|
||||
44
dummy-data/proxmox/api2/json/nodes/node1/status
Normal file
44
dummy-data/proxmox/api2/json/nodes/node1/status
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
{
|
||||
"data": {
|
||||
"swap": {
|
||||
"free": 8589930496,
|
||||
"total": 8589930496,
|
||||
"used": 0
|
||||
},
|
||||
"cpuinfo": {
|
||||
"model": "Intel(R) Core(TM) i7-4790 CPU @3.60GHz",
|
||||
"hvm": "1",
|
||||
"user_hz": 100,
|
||||
"sockets": 1,
|
||||
"cpus": 8,
|
||||
"flags": "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm xsaveopt dtherm ida arat pln pts",
|
||||
"cores": 4,
|
||||
"mhz": "4000.000"
|
||||
},
|
||||
"idle": 0,
|
||||
"memory": {
|
||||
"used": 6283382784,
|
||||
"total": 12419133440,
|
||||
"free": 6135750656
|
||||
},
|
||||
"rootfs": {
|
||||
"avail": 22670036992,
|
||||
"free": 24176627712,
|
||||
"total": 29148368896,
|
||||
"used": 4971741184
|
||||
},
|
||||
"uptime": 3390081,
|
||||
"ksm": {
|
||||
"shared": 1079975936
|
||||
},
|
||||
"cpu": 0.00440286186020914,
|
||||
"kversion": "Linux 5.15.30-2-pve #1 SMP PVE 5.15.30-3 (Fri, 22 Apr 2022 18: 08: 27+0200)",
|
||||
"loadavg": [
|
||||
"0.00",
|
||||
"0.01",
|
||||
"0.04"
|
||||
],
|
||||
"pveversion": "pve-manager/7.2-3/c743d6c1",
|
||||
"wait": 0.00330214639515685
|
||||
}
|
||||
}
|
||||
53
dummy-data/qBittorrent/api/v2/torrents/info
Normal file
53
dummy-data/qBittorrent/api/v2/torrents/info
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
[
|
||||
{
|
||||
"added_on": 1666985518,
|
||||
"amount_left": 0,
|
||||
"auto_tmm": false,
|
||||
"availability": -1,
|
||||
"category": "",
|
||||
"completed": 1474873344,
|
||||
"completion_on": 1666985584,
|
||||
"content_path": "/downloads/ubuntu-22.04.1-live-server-amd64.iso",
|
||||
"dl_limit": -1,
|
||||
"dlspeed": 0,
|
||||
"download_path": "",
|
||||
"downloaded": 1513976240,
|
||||
"downloaded_session": 0,
|
||||
"eta": 8640000,
|
||||
"f_l_piece_prio": false,
|
||||
"force_start": false,
|
||||
"hash": "cf3ea75e2ebbd30e0da6e6e215e2226bf35f2e33",
|
||||
"infohash_v1": "cf3ea75e2ebbd30e0da6e6e215e2226bf35f2e33",
|
||||
"infohash_v2": "",
|
||||
"last_activity": 1666985588,
|
||||
"magnet_uri": "magnet:?xt=urn:btih:cf3ea75e2ebbd30e0da6e6e215e2226bf35f2e33&dn=ubuntu-22.04.1-live-server-amd64.iso&tr=https%3a%2f%2ftorrent.ubuntu.com%2fannounce&tr=https%3a%2f%2fipv6.torrent.ubuntu.com%2fannounce",
|
||||
"max_ratio": 0,
|
||||
"max_seeding_time": -1,
|
||||
"name": "ubuntu-22.04.1-live-server-amd64.iso",
|
||||
"num_complete": 0,
|
||||
"num_incomplete": 583,
|
||||
"num_leechs": 0,
|
||||
"num_seeds": 0,
|
||||
"priority": 0,
|
||||
"progress": 1,
|
||||
"ratio": 1.7163413343924075e-05,
|
||||
"ratio_limit": -2,
|
||||
"save_path": "/downloads/",
|
||||
"seeding_time": 4,
|
||||
"seeding_time_limit": -2,
|
||||
"seen_complete": 1666985584,
|
||||
"seq_dl": false,
|
||||
"size": 1474873344,
|
||||
"state": "pausedUP",
|
||||
"super_seeding": false,
|
||||
"tags": "",
|
||||
"time_active": 69,
|
||||
"total_size": 1474873344,
|
||||
"tracker": "",
|
||||
"trackers_count": 2,
|
||||
"up_limit": -1,
|
||||
"uploaded": 25985,
|
||||
"uploaded_session": 0,
|
||||
"upspeed": 0
|
||||
}
|
||||
]
|
||||
10
dummy-data/qBittorrent/api/v2/transfer/info
Normal file
10
dummy-data/qBittorrent/api/v2/transfer/info
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"connection_status": "connected",
|
||||
"dht_nodes": 318,
|
||||
"dl_info_data": 23481469329,
|
||||
"dl_info_speed": 1234567,
|
||||
"dl_rate_limit": 40960000,
|
||||
"up_info_data": 1788370216,
|
||||
"up_info_speed": 765432,
|
||||
"up_rate_limit": 10547200
|
||||
}
|
||||
35
dummy-data/radarr/api/v3/health
Normal file
35
dummy-data/radarr/api/v3/health
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[
|
||||
{
|
||||
"source": "IndexerStatusCheck",
|
||||
"type": "warning",
|
||||
"message": "Indexer TorrentDay is unavailable due to recent indexer errors: HTTP 503 Service Unavailable",
|
||||
"wikiUrl": "https://wiki.servarr.com/radarr/health#indexers-are-unavailable-due-to-recent-failures"
|
||||
},
|
||||
{
|
||||
"source": "ImportMechanismCheck",
|
||||
"type": "ok",
|
||||
"message": "No issues with import mechanism checks"
|
||||
},
|
||||
{
|
||||
"source": "DownloadClientStatusCheck",
|
||||
"type": "ok",
|
||||
"message": "All download clients are available"
|
||||
},
|
||||
{
|
||||
"source": "RootFolderCheck",
|
||||
"type": "warning",
|
||||
"message": "Missing root folder: /movies",
|
||||
"wikiUrl": "https://wiki.servarr.com/radarr/health#missing-root-folder"
|
||||
},
|
||||
{
|
||||
"source": "UpdateCheck",
|
||||
"type": "ok",
|
||||
"message": "Update available: 4.7.5.7809 -> 5.0.3.8127"
|
||||
},
|
||||
{
|
||||
"source": "DiskSpaceCheck",
|
||||
"type": "error",
|
||||
"message": "Disk space is critically low on /movies: 2.1 GB remaining",
|
||||
"wikiUrl": "https://wiki.servarr.com/radarr/health#disk-space"
|
||||
}
|
||||
]
|
||||
8
dummy-data/radarr/api/v3/queue
Normal file
8
dummy-data/radarr/api/v3/queue
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"page": 1,
|
||||
"pageSize": 20,
|
||||
"sortKey": "progress",
|
||||
"sortDirection": "descending",
|
||||
"totalRecords": 2,
|
||||
"records": []
|
||||
}
|
||||
16
dummy-data/radarr/api/v3/queuedetails
Normal file
16
dummy-data/radarr/api/v3/queuedetails
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
[
|
||||
{
|
||||
"movieId": 1,
|
||||
"title": "Inception (2010)",
|
||||
"trackedDownloadStatus": "ok",
|
||||
"trackedDownloadState": "importPending",
|
||||
"id": 1
|
||||
},
|
||||
{
|
||||
"movieId": 2,
|
||||
"title": "The Matrix (1999)",
|
||||
"trackedDownloadStatus": "warning",
|
||||
"trackedDownloadState": "downloading",
|
||||
"id": 2
|
||||
}
|
||||
]
|
||||
161
dummy-data/radarr/api/v3/wanted/missing
Normal file
161
dummy-data/radarr/api/v3/wanted/missing
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
{
|
||||
"page": 1,
|
||||
"pageSize": 20,
|
||||
"sortKey": "digitalRelease",
|
||||
"sortDirection": "descending",
|
||||
"totalRecords": 5,
|
||||
"records": [
|
||||
{
|
||||
"title": "Dune: Part Two",
|
||||
"originalTitle": "Dune: Part Two",
|
||||
"originalLanguage": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
},
|
||||
"alternateTitles": [],
|
||||
"secondaryYear": null,
|
||||
"secondaryYearSourceId": 0,
|
||||
"sortTitle": "dune part two",
|
||||
"sizeOnDisk": 0,
|
||||
"status": "released",
|
||||
"overview": "Follow the mythic journey of Paul Atreides as he unites with Chani and the Fremen while on a path of revenge against the conspirators who destroyed his family.",
|
||||
"inCinemas": "2024-02-29T00:00:00Z",
|
||||
"physicalRelease": "2024-05-14T00:00:00Z",
|
||||
"digitalRelease": "2024-04-16T00:00:00Z",
|
||||
"images": [],
|
||||
"website": "",
|
||||
"remotePoster": "",
|
||||
"year": 2024,
|
||||
"hasFile": false,
|
||||
"youTubeTrailerId": "",
|
||||
"studio": "Warner Bros. Pictures",
|
||||
"path": "/movies/Dune Part Two (2024)",
|
||||
"qualityProfileId": 1,
|
||||
"monitored": true,
|
||||
"minimumAvailability": "announced",
|
||||
"isAvailable": true,
|
||||
"folderName": "Dune Part Two (2024)",
|
||||
"runtime": 166,
|
||||
"cleanTitle": "duneparttwo",
|
||||
"imdbId": "tt15239678",
|
||||
"tmdbId": 693134,
|
||||
"titleSlug": "dune-part-two-2024",
|
||||
"certification": "PG-13",
|
||||
"genres": ["Adventure", "Drama", "Science Fiction"],
|
||||
"tags": [],
|
||||
"added": "2024-01-10T00:00:00Z",
|
||||
"ratings": {
|
||||
"votes": 234567,
|
||||
"value": 8.9
|
||||
},
|
||||
"movieFile": null,
|
||||
"collection": {
|
||||
"name": "Dune Collection",
|
||||
"tmdbId": 726871,
|
||||
"images": []
|
||||
},
|
||||
"popularity": 89.245,
|
||||
"id": 3
|
||||
},
|
||||
{
|
||||
"title": "Oppenheimer",
|
||||
"originalTitle": "Oppenheimer",
|
||||
"originalLanguage": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
},
|
||||
"alternateTitles": [],
|
||||
"secondaryYear": null,
|
||||
"secondaryYearSourceId": 0,
|
||||
"sortTitle": "oppenheimer",
|
||||
"sizeOnDisk": 0,
|
||||
"status": "released",
|
||||
"overview": "The story of J. Robert Oppenheimer's role in the development of the atomic bomb during World War II.",
|
||||
"inCinemas": "2023-07-21T00:00:00Z",
|
||||
"physicalRelease": "2023-11-21T00:00:00Z",
|
||||
"digitalRelease": "2023-10-31T00:00:00Z",
|
||||
"images": [],
|
||||
"website": "",
|
||||
"remotePoster": "",
|
||||
"year": 2023,
|
||||
"hasFile": false,
|
||||
"youTubeTrailerId": "",
|
||||
"studio": "Universal Pictures",
|
||||
"path": "/movies/Oppenheimer (2023)",
|
||||
"qualityProfileId": 1,
|
||||
"monitored": true,
|
||||
"minimumAvailability": "announced",
|
||||
"isAvailable": true,
|
||||
"folderName": "Oppenheimer (2023)",
|
||||
"runtime": 180,
|
||||
"cleanTitle": "oppenheimer",
|
||||
"imdbId": "tt15398776",
|
||||
"tmdbId": 872585,
|
||||
"titleSlug": "oppenheimer-2023",
|
||||
"certification": "R",
|
||||
"genres": ["Drama", "History"],
|
||||
"tags": [],
|
||||
"added": "2024-01-05T00:00:00Z",
|
||||
"ratings": {
|
||||
"votes": 456789,
|
||||
"value": 8.4
|
||||
},
|
||||
"movieFile": null,
|
||||
"collection": null,
|
||||
"popularity": 92.567,
|
||||
"id": 4
|
||||
},
|
||||
{
|
||||
"title": "Spider-Man: Across the Spider-Verse",
|
||||
"originalTitle": "Spider-Man: Across the Spider-Verse",
|
||||
"originalLanguage": {
|
||||
"id": 1,
|
||||
"name": "English"
|
||||
},
|
||||
"alternateTitles": [],
|
||||
"secondaryYear": null,
|
||||
"secondaryYearSourceId": 0,
|
||||
"sortTitle": "spider man across spider verse",
|
||||
"sizeOnDisk": 0,
|
||||
"status": "released",
|
||||
"overview": "After reuniting with Gwen Stacy, Brooklyn's full-time, friendly neighborhood Spider-Man is catapulted across the Multiverse, where he encounters the Spider-Society.",
|
||||
"inCinemas": "2023-06-02T00:00:00Z",
|
||||
"physicalRelease": "2023-09-05T00:00:00Z",
|
||||
"digitalRelease": "2023-08-08T00:00:00Z",
|
||||
"images": [],
|
||||
"website": "",
|
||||
"remotePoster": "",
|
||||
"year": 2023,
|
||||
"hasFile": false,
|
||||
"youTubeTrailerId": "",
|
||||
"studio": "Sony Pictures Animation",
|
||||
"path": "/movies/Spider-Man Across the Spider-Verse (2023)",
|
||||
"qualityProfileId": 2,
|
||||
"monitored": true,
|
||||
"minimumAvailability": "announced",
|
||||
"isAvailable": true,
|
||||
"folderName": "Spider-Man Across the Spider-Verse (2023)",
|
||||
"runtime": 140,
|
||||
"cleanTitle": "spidermanacrossthespiderverse",
|
||||
"imdbId": "tt9362722",
|
||||
"tmdbId": 569094,
|
||||
"titleSlug": "spider-man-across-the-spider-verse-2023",
|
||||
"certification": "PG",
|
||||
"genres": ["Animation", "Action", "Adventure"],
|
||||
"tags": [],
|
||||
"added": "2024-01-03T00:00:00Z",
|
||||
"ratings": {
|
||||
"votes": 345678,
|
||||
"value": 8.7
|
||||
},
|
||||
"movieFile": null,
|
||||
"collection": {
|
||||
"name": "Spider-Verse Collection",
|
||||
"tmdbId": 573436,
|
||||
"images": []
|
||||
},
|
||||
"popularity": 85.432,
|
||||
"id": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue