Compare commits
6 Commits
v0.18.0
...
monitor-on
| Author | SHA1 | Date | |
|---|---|---|---|
| 0f16423f66 | |||
| 937313fe59 | |||
| 9b3506ab17 | |||
| 6e0eed8b4e | |||
| 38a5baa17e | |||
| 1d573c09e7 |
@@ -23,6 +23,7 @@ services:
|
|||||||
- mercure_config:/config
|
- mercure_config:/config
|
||||||
tty: true
|
tty: true
|
||||||
environment:
|
environment:
|
||||||
|
TZ: America/Chicago
|
||||||
MERCURE_PUBLISHER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
|
MERCURE_PUBLISHER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
|
||||||
MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
|
MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -37,6 +38,8 @@ services:
|
|||||||
- $PWD:/app
|
- $PWD:/app
|
||||||
- $PWD/var/download:/var/download
|
- $PWD/var/download:/var/download
|
||||||
tty: true
|
tty: true
|
||||||
|
environment:
|
||||||
|
TZ: America/Chicago
|
||||||
command: php /app/bin/console messenger:consume async -vv --time-limit=3600 --limit=10
|
command: php /app/bin/console messenger:consume async -vv --time-limit=3600 --limit=10
|
||||||
|
|
||||||
|
|
||||||
@@ -45,6 +48,8 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- $PWD:/app
|
- $PWD:/app
|
||||||
|
environment:
|
||||||
|
TZ: America/Chicago
|
||||||
command: php /app/bin/console messenger:consume scheduler_monitor -vv
|
command: php /app/bin/console messenger:consume scheduler_monitor -vv
|
||||||
tty: true
|
tty: true
|
||||||
|
|
||||||
@@ -55,6 +60,8 @@ services:
|
|||||||
- redis_data:/data
|
- redis_data:/data
|
||||||
command: redis-server --maxmemory 512MB
|
command: redis-server --maxmemory 512MB
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
TZ: America/Chicago
|
||||||
|
|
||||||
|
|
||||||
database:
|
database:
|
||||||
@@ -64,6 +71,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- mysql:/var/lib/mysql
|
- mysql:/var/lib/mysql
|
||||||
environment:
|
environment:
|
||||||
|
TZ: America/Chicago
|
||||||
MYSQL_DATABASE: app
|
MYSQL_DATABASE: app
|
||||||
MYSQL_USERNAME: app
|
MYSQL_USERNAME: app
|
||||||
MYSQL_PASSWORD: password
|
MYSQL_PASSWORD: password
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=8.2",
|
"php": ">=8.4",
|
||||||
"ext-ctype": "*",
|
"ext-ctype": "*",
|
||||||
"ext-iconv": "*",
|
"ext-iconv": "*",
|
||||||
"1tomany/rich-bundle": "^1.8",
|
"1tomany/rich-bundle": "^1.8",
|
||||||
@@ -57,6 +57,9 @@
|
|||||||
"symfony/flex": true,
|
"symfony/flex": true,
|
||||||
"symfony/runtime": true
|
"symfony/runtime": true
|
||||||
},
|
},
|
||||||
|
"platform": {
|
||||||
|
"php": "8.4"
|
||||||
|
},
|
||||||
"bump-after-update": true,
|
"bump-after-update": true,
|
||||||
"sort-packages": true
|
"sort-packages": true
|
||||||
},
|
},
|
||||||
|
|||||||
148
composer.lock
generated
148
composer.lock
generated
@@ -4,20 +4,20 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "55c76ae7fe5ad6e5c7edbb0150987fc7",
|
"content-hash": "e8b5e39f9d73a6ace2b9e39240186b4f",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "1tomany/rich-bundle",
|
"name": "1tomany/rich-bundle",
|
||||||
"version": "v1.9.5",
|
"version": "v1.10.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/1tomany/rich-bundle.git",
|
"url": "https://github.com/1tomany/rich-bundle.git",
|
||||||
"reference": "434c0fa70aefa11a23342006a10221360beb0f71"
|
"reference": "63a728e22632082d6db07e158bf1f5a4e5854d01"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/1tomany/rich-bundle/zipball/434c0fa70aefa11a23342006a10221360beb0f71",
|
"url": "https://api.github.com/repos/1tomany/rich-bundle/zipball/63a728e22632082d6db07e158bf1f5a4e5854d01",
|
||||||
"reference": "434c0fa70aefa11a23342006a10221360beb0f71",
|
"reference": "63a728e22632082d6db07e158bf1f5a4e5854d01",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -60,9 +60,9 @@
|
|||||||
"description": "Symfony bundle that provides easy scaffolding to build RICH applications",
|
"description": "Symfony bundle that provides easy scaffolding to build RICH applications",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/1tomany/rich-bundle/issues",
|
"issues": "https://github.com/1tomany/rich-bundle/issues",
|
||||||
"source": "https://github.com/1tomany/rich-bundle/tree/v1.9.5"
|
"source": "https://github.com/1tomany/rich-bundle/tree/v1.10.4"
|
||||||
},
|
},
|
||||||
"time": "2025-05-01T16:54:44+00:00"
|
"time": "2025-06-05T00:20:20+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "aimeos/map",
|
"name": "aimeos/map",
|
||||||
@@ -997,16 +997,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/doctrine-migrations-bundle",
|
"name": "doctrine/doctrine-migrations-bundle",
|
||||||
"version": "3.4.1",
|
"version": "3.4.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
|
"url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
|
||||||
"reference": "e858ce0f5c12b266dce7dce24834448355155da7"
|
"reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/e858ce0f5c12b266dce7dce24834448355155da7",
|
"url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/5a6ac7120c2924c4c070a869d08b11ccf9e277b9",
|
||||||
"reference": "e858ce0f5c12b266dce7dce24834448355155da7",
|
"reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1020,7 +1020,6 @@
|
|||||||
"composer/semver": "^3.0",
|
"composer/semver": "^3.0",
|
||||||
"doctrine/coding-standard": "^12",
|
"doctrine/coding-standard": "^12",
|
||||||
"doctrine/orm": "^2.6 || ^3",
|
"doctrine/orm": "^2.6 || ^3",
|
||||||
"doctrine/persistence": "^2.0 || ^3",
|
|
||||||
"phpstan/phpstan": "^1.4 || ^2",
|
"phpstan/phpstan": "^1.4 || ^2",
|
||||||
"phpstan/phpstan-deprecation-rules": "^1 || ^2",
|
"phpstan/phpstan-deprecation-rules": "^1 || ^2",
|
||||||
"phpstan/phpstan-phpunit": "^1 || ^2",
|
"phpstan/phpstan-phpunit": "^1 || ^2",
|
||||||
@@ -1063,7 +1062,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues",
|
"issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues",
|
||||||
"source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.1"
|
"source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.2"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1079,7 +1078,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-01-27T22:48:22+00:00"
|
"time": "2025-03-11T17:36:26+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/event-manager",
|
"name": "doctrine/event-manager",
|
||||||
@@ -2079,16 +2078,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nesbot/carbon",
|
"name": "nesbot/carbon",
|
||||||
"version": "3.9.1",
|
"version": "3.10.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/CarbonPHP/carbon.git",
|
"url": "https://github.com/CarbonPHP/carbon.git",
|
||||||
"reference": "ced71f79398ece168e24f7f7710462f462310d4d"
|
"reference": "c1397390dd0a7e0f11660f0ae20f753d88c1f3d9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ced71f79398ece168e24f7f7710462f462310d4d",
|
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/c1397390dd0a7e0f11660f0ae20f753d88c1f3d9",
|
||||||
"reference": "ced71f79398ece168e24f7f7710462f462310d4d",
|
"reference": "c1397390dd0a7e0f11660f0ae20f753d88c1f3d9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -2096,9 +2095,9 @@
|
|||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"php": "^8.1",
|
"php": "^8.1",
|
||||||
"psr/clock": "^1.0",
|
"psr/clock": "^1.0",
|
||||||
"symfony/clock": "^6.3 || ^7.0",
|
"symfony/clock": "^6.3.12 || ^7.0",
|
||||||
"symfony/polyfill-mbstring": "^1.0",
|
"symfony/polyfill-mbstring": "^1.0",
|
||||||
"symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0"
|
"symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
"psr/clock-implementation": "1.0"
|
"psr/clock-implementation": "1.0"
|
||||||
@@ -2106,14 +2105,13 @@
|
|||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/dbal": "^3.6.3 || ^4.0",
|
"doctrine/dbal": "^3.6.3 || ^4.0",
|
||||||
"doctrine/orm": "^2.15.2 || ^3.0",
|
"doctrine/orm": "^2.15.2 || ^3.0",
|
||||||
"friendsofphp/php-cs-fixer": "^3.57.2",
|
"friendsofphp/php-cs-fixer": "^3.75.0",
|
||||||
"kylekatarnls/multi-tester": "^2.5.3",
|
"kylekatarnls/multi-tester": "^2.5.3",
|
||||||
"ondrejmirtes/better-reflection": "^6.25.0.4",
|
|
||||||
"phpmd/phpmd": "^2.15.0",
|
"phpmd/phpmd": "^2.15.0",
|
||||||
"phpstan/extension-installer": "^1.3.1",
|
"phpstan/extension-installer": "^1.4.3",
|
||||||
"phpstan/phpstan": "^1.11.2",
|
"phpstan/phpstan": "^2.1.17",
|
||||||
"phpunit/phpunit": "^10.5.20",
|
"phpunit/phpunit": "^10.5.46",
|
||||||
"squizlabs/php_codesniffer": "^3.9.0"
|
"squizlabs/php_codesniffer": "^3.13.0"
|
||||||
},
|
},
|
||||||
"bin": [
|
"bin": [
|
||||||
"bin/carbon"
|
"bin/carbon"
|
||||||
@@ -2181,7 +2179,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-05-01T19:51:51+00:00"
|
"time": "2025-06-12T10:24:28+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nihilarr/parse-torrent-name",
|
"name": "nihilarr/parse-torrent-name",
|
||||||
@@ -7672,16 +7670,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/stimulus-bundle",
|
"name": "symfony/stimulus-bundle",
|
||||||
"version": "v2.25.2",
|
"version": "v2.26.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/stimulus-bundle.git",
|
"url": "https://github.com/symfony/stimulus-bundle.git",
|
||||||
"reference": "5a6aef0646119530da862d5afa1386ade3b9ed43"
|
"reference": "82c174ebe564e6ecc1412974b6380b86d450675f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/5a6aef0646119530da862d5afa1386ade3b9ed43",
|
"url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/82c174ebe564e6ecc1412974b6380b86d450675f",
|
||||||
"reference": "5a6aef0646119530da862d5afa1386ade3b9ed43",
|
"reference": "82c174ebe564e6ecc1412974b6380b86d450675f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -7721,7 +7719,7 @@
|
|||||||
"symfony-ux"
|
"symfony-ux"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/stimulus-bundle/tree/v2.25.2"
|
"source": "https://github.com/symfony/stimulus-bundle/tree/v2.26.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -7737,7 +7735,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-05-19T11:54:27+00:00"
|
"time": "2025-06-05T17:25:17+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/stopwatch",
|
"name": "symfony/stopwatch",
|
||||||
@@ -8338,16 +8336,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/ux-icons",
|
"name": "symfony/ux-icons",
|
||||||
"version": "v2.25.0",
|
"version": "v2.26.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/ux-icons.git",
|
"url": "https://github.com/symfony/ux-icons.git",
|
||||||
"reference": "430b2753aa55a46baa001055bf7976b62bc96942"
|
"reference": "e5c1e5b5093ae26dba45d0f3390a1e21f305c47a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/ux-icons/zipball/430b2753aa55a46baa001055bf7976b62bc96942",
|
"url": "https://api.github.com/repos/symfony/ux-icons/zipball/e5c1e5b5093ae26dba45d0f3390a1e21f305c47a",
|
||||||
"reference": "430b2753aa55a46baa001055bf7976b62bc96942",
|
"reference": "e5c1e5b5093ae26dba45d0f3390a1e21f305c47a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -8407,7 +8405,7 @@
|
|||||||
"twig"
|
"twig"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/ux-icons/tree/v2.25.0"
|
"source": "https://github.com/symfony/ux-icons/tree/v2.26.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -8423,20 +8421,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-04-07T13:54:07+00:00"
|
"time": "2025-05-30T02:07:34+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/ux-live-component",
|
"name": "symfony/ux-live-component",
|
||||||
"version": "v2.25.2",
|
"version": "v2.26.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/ux-live-component.git",
|
"url": "https://github.com/symfony/ux-live-component.git",
|
||||||
"reference": "79e8cc179eb21119547c492ae21e4bf529ac1a15"
|
"reference": "92b300bb90d87f14aeae47b0f5c9e058b15f5c2f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/ux-live-component/zipball/79e8cc179eb21119547c492ae21e4bf529ac1a15",
|
"url": "https://api.github.com/repos/symfony/ux-live-component/zipball/92b300bb90d87f14aeae47b0f5c9e058b15f5c2f",
|
||||||
"reference": "79e8cc179eb21119547c492ae21e4bf529ac1a15",
|
"reference": "92b300bb90d87f14aeae47b0f5c9e058b15f5c2f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -8449,7 +8447,9 @@
|
|||||||
"twig/twig": "^3.10.3"
|
"twig/twig": "^3.10.3"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"symfony/config": "<5.4.0"
|
"symfony/config": "<5.4.0",
|
||||||
|
"symfony/property-info": "~7.0.0",
|
||||||
|
"symfony/type-info": "<7.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/annotations": "^1.0",
|
"doctrine/annotations": "^1.0",
|
||||||
@@ -8502,7 +8502,7 @@
|
|||||||
"twig"
|
"twig"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/ux-live-component/tree/v2.25.2"
|
"source": "https://github.com/symfony/ux-live-component/tree/v2.26.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -8518,20 +8518,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-05-19T11:54:27+00:00"
|
"time": "2025-06-06T19:57:53+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/ux-turbo",
|
"name": "symfony/ux-turbo",
|
||||||
"version": "v2.25.2",
|
"version": "v2.26.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/ux-turbo.git",
|
"url": "https://github.com/symfony/ux-turbo.git",
|
||||||
"reference": "11ebca138005c7e25678c3f98a07ddf718a0480c"
|
"reference": "3754ac2b41220127e58c62f7599eaf7834b69a55"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/ux-turbo/zipball/11ebca138005c7e25678c3f98a07ddf718a0480c",
|
"url": "https://api.github.com/repos/symfony/ux-turbo/zipball/3754ac2b41220127e58c62f7599eaf7834b69a55",
|
||||||
"reference": "11ebca138005c7e25678c3f98a07ddf718a0480c",
|
"reference": "3754ac2b41220127e58c62f7599eaf7834b69a55",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -8545,7 +8545,8 @@
|
|||||||
"dbrekelmans/bdi": "dev-main",
|
"dbrekelmans/bdi": "dev-main",
|
||||||
"doctrine/doctrine-bundle": "^2.4.3",
|
"doctrine/doctrine-bundle": "^2.4.3",
|
||||||
"doctrine/orm": "^2.8 | 3.0",
|
"doctrine/orm": "^2.8 | 3.0",
|
||||||
"phpstan/phpstan": "^1.10",
|
"php-webdriver/webdriver": "^1.15",
|
||||||
|
"phpstan/phpstan": "^2.1.17",
|
||||||
"symfony/asset-mapper": "^6.4|^7.0",
|
"symfony/asset-mapper": "^6.4|^7.0",
|
||||||
"symfony/debug-bundle": "^5.4|^6.0|^7.0",
|
"symfony/debug-bundle": "^5.4|^6.0|^7.0",
|
||||||
"symfony/expression-language": "^5.4|^6.0|^7.0",
|
"symfony/expression-language": "^5.4|^6.0|^7.0",
|
||||||
@@ -8553,7 +8554,7 @@
|
|||||||
"symfony/framework-bundle": "^6.4|^7.0",
|
"symfony/framework-bundle": "^6.4|^7.0",
|
||||||
"symfony/mercure-bundle": "^0.3.7",
|
"symfony/mercure-bundle": "^0.3.7",
|
||||||
"symfony/messenger": "^5.4|^6.0|^7.0",
|
"symfony/messenger": "^5.4|^6.0|^7.0",
|
||||||
"symfony/panther": "^2.1",
|
"symfony/panther": "^2.2",
|
||||||
"symfony/phpunit-bridge": "^5.4|^6.0|^7.0",
|
"symfony/phpunit-bridge": "^5.4|^6.0|^7.0",
|
||||||
"symfony/process": "^5.4|6.3.*|^7.0",
|
"symfony/process": "^5.4|6.3.*|^7.0",
|
||||||
"symfony/property-access": "^5.4|^6.0|^7.0",
|
"symfony/property-access": "^5.4|^6.0|^7.0",
|
||||||
@@ -8600,7 +8601,7 @@
|
|||||||
"turbo-stream"
|
"turbo-stream"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/ux-turbo/tree/v2.25.2"
|
"source": "https://github.com/symfony/ux-turbo/tree/v2.26.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -8616,20 +8617,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-05-19T11:54:27+00:00"
|
"time": "2025-06-05T17:25:17+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/ux-twig-component",
|
"name": "symfony/ux-twig-component",
|
||||||
"version": "v2.25.2",
|
"version": "v2.26.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/ux-twig-component.git",
|
"url": "https://github.com/symfony/ux-twig-component.git",
|
||||||
"reference": "d20da25517fc09d147897d02819a046f0a0f6735"
|
"reference": "825e653b34fb48ed2198913c603d80f7632fe9c1"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/d20da25517fc09d147897d02819a046f0a0f6735",
|
"url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/825e653b34fb48ed2198913c603d80f7632fe9c1",
|
||||||
"reference": "d20da25517fc09d147897d02819a046f0a0f6735",
|
"reference": "825e653b34fb48ed2198913c603d80f7632fe9c1",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -8683,7 +8684,7 @@
|
|||||||
"twig"
|
"twig"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/ux-twig-component/tree/v2.25.2"
|
"source": "https://github.com/symfony/ux-twig-component/tree/v2.26.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -8699,7 +8700,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-05-20T13:06:01+00:00"
|
"time": "2025-05-26T06:21:54+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/validator",
|
"name": "symfony/validator",
|
||||||
@@ -9386,16 +9387,16 @@
|
|||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
"name": "nikic/php-parser",
|
"name": "nikic/php-parser",
|
||||||
"version": "v5.4.0",
|
"version": "v5.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||||
"reference": "447a020a1f875a434d62f2a401f53b82a396e494"
|
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
|
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
|
||||||
"reference": "447a020a1f875a434d62f2a401f53b82a396e494",
|
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -9438,22 +9439,22 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||||
"source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
|
"source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
|
||||||
},
|
},
|
||||||
"time": "2024-12-30T11:07:19+00:00"
|
"time": "2025-05-31T08:24:38+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpstan",
|
"name": "phpstan/phpstan",
|
||||||
"version": "2.1.14",
|
"version": "2.1.17",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpstan/phpstan.git",
|
"url": "https://github.com/phpstan/phpstan.git",
|
||||||
"reference": "8f2e03099cac24ff3b379864d171c5acbfc6b9a2"
|
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/8f2e03099cac24ff3b379864d171c5acbfc6b9a2",
|
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053",
|
||||||
"reference": "8f2e03099cac24ff3b379864d171c5acbfc6b9a2",
|
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -9498,7 +9499,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-05-02T15:32:28+00:00"
|
"time": "2025-05-21T20:55:28+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/maker-bundle",
|
"name": "symfony/maker-bundle",
|
||||||
@@ -9684,10 +9685,13 @@
|
|||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": {
|
"platform": {
|
||||||
"php": ">=8.2",
|
"php": ">=8.4",
|
||||||
"ext-ctype": "*",
|
"ext-ctype": "*",
|
||||||
"ext-iconv": "*"
|
"ext-iconv": "*"
|
||||||
},
|
},
|
||||||
"platform-dev": [],
|
"platform-dev": [],
|
||||||
|
"platform-overrides": {
|
||||||
|
"php": "8.4"
|
||||||
|
},
|
||||||
"plugin-api-version": "2.3.0"
|
"plugin-api-version": "2.3.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
twig:
|
twig:
|
||||||
file_name_pattern: '*.twig'
|
file_name_pattern: '*.twig'
|
||||||
|
date:
|
||||||
|
timezone: '%env(default:app.default.timezone:TZ)%'
|
||||||
|
|
||||||
when@test:
|
when@test:
|
||||||
twig:
|
twig:
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ parameters:
|
|||||||
app.cache.adapter.default: 'filesystem'
|
app.cache.adapter.default: 'filesystem'
|
||||||
app.cache.redis.host.default: 'redis://redis'
|
app.cache.redis.host.default: 'redis://redis'
|
||||||
|
|
||||||
|
# Various configs
|
||||||
|
app.default.timezone: 'America/Chicago'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# default configuration for services in *this* file
|
# default configuration for services in *this* file
|
||||||
_defaults:
|
_defaults:
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
MERCURE_PUBLISHER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
|
MERCURE_PUBLISHER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
|
||||||
MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
|
MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
|
||||||
|
tty: true
|
||||||
deploy:
|
deploy:
|
||||||
replicas: 2
|
replicas: 2
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -55,10 +55,6 @@ readonly class MonitorTvSeasonHandler implements HandlerInterface
|
|||||||
$this->logger->info('> [MonitorTvSeasonHandler] Found ' . count($episodesInSeason) . ' episodes in season ' . $monitor->getSeason() . ' for title: ' . $monitor->getTitle());
|
$this->logger->info('> [MonitorTvSeasonHandler] Found ' . count($episodesInSeason) . ' episodes in season ' . $monitor->getSeason() . ' for title: ' . $monitor->getTitle());
|
||||||
|
|
||||||
if ($downloadedEpisodes->count() !== $episodesInSeason->count()) {
|
if ($downloadedEpisodes->count() !== $episodesInSeason->count()) {
|
||||||
// Since $monitor has children monitors, set the status
|
|
||||||
// to Active, so it will be re-executed.
|
|
||||||
$monitor->setStatus('Active');
|
|
||||||
|
|
||||||
// Dispatch Episode commands for each missing Episode
|
// Dispatch Episode commands for each missing Episode
|
||||||
foreach ($episodesInSeason as $episode) {
|
foreach ($episodesInSeason as $episode) {
|
||||||
// Check if the episode is already downloaded
|
// Check if the episode is already downloaded
|
||||||
@@ -99,6 +95,8 @@ readonly class MonitorTvSeasonHandler implements HandlerInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set the status to Active, so it will be re-executed.
|
||||||
|
$monitor->setStatus('Active');
|
||||||
$monitor->setLastSearch(new DateTimeImmutable());
|
$monitor->setLastSearch(new DateTimeImmutable());
|
||||||
$monitor->setSearchCount($monitor->getSearchCount() + 1);
|
$monitor->setSearchCount($monitor->getSearchCount() + 1);
|
||||||
|
|
||||||
|
|||||||
@@ -56,10 +56,6 @@ readonly class MonitorTvShowHandler implements HandlerInterface
|
|||||||
$this->logger->info('> [MonitorTvShowHandler] Found ' . count($episodesInShow) . ' episodes for title: ' . $monitor->getTitle());
|
$this->logger->info('> [MonitorTvShowHandler] Found ' . count($episodesInShow) . ' episodes for title: ' . $monitor->getTitle());
|
||||||
|
|
||||||
if ($downloadedEpisodes->count() !== $episodesInShow->count()) {
|
if ($downloadedEpisodes->count() !== $episodesInShow->count()) {
|
||||||
// Since $monitor has children monitors, set the status
|
|
||||||
// to Active, so it will be re-executed.
|
|
||||||
$monitor->setStatus('Active');
|
|
||||||
|
|
||||||
// Dispatch Episode commands for each missing Episode
|
// Dispatch Episode commands for each missing Episode
|
||||||
foreach ($episodesInShow as $episode) {
|
foreach ($episodesInShow as $episode) {
|
||||||
// Check if the episode is already downloaded
|
// Check if the episode is already downloaded
|
||||||
@@ -102,6 +98,8 @@ readonly class MonitorTvShowHandler implements HandlerInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set the status to Active, so it will be re-executed.
|
||||||
|
$monitor->setStatus('Active');
|
||||||
$monitor->setLastSearch(new DateTimeImmutable());
|
$monitor->setLastSearch(new DateTimeImmutable());
|
||||||
$monitor->setSearchCount($monitor->getSearchCount() + 1);
|
$monitor->setSearchCount($monitor->getSearchCount() + 1);
|
||||||
$this->entityManager->flush();
|
$this->entityManager->flush();
|
||||||
|
|||||||
17
src/Monitor/Dto/UpcomingEpisode.php
Normal file
17
src/Monitor/Dto/UpcomingEpisode.php
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Monitor\Dto;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class UpcomingEpisode
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
public string $title,
|
||||||
|
public string $airDate {
|
||||||
|
get => Carbon::parse($this->airDate)->format('m/d/Y');
|
||||||
|
},
|
||||||
|
public string $episodeTitle,
|
||||||
|
public int $episodeNumber,
|
||||||
|
) {}
|
||||||
|
}
|
||||||
@@ -259,4 +259,9 @@ class Monitor
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isActive(): bool
|
||||||
|
{
|
||||||
|
return in_array($this->status, ['New', 'Active', 'In Progress']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ class MediaFiles
|
|||||||
foreach ($existingEpisodes as $episode) {
|
foreach ($existingEpisodes as $episode) {
|
||||||
$ptn = (object) (new PTN())->parse($episode->getFilename());
|
$ptn = (object) (new PTN())->parse($episode->getFilename());
|
||||||
|
|
||||||
if (!property_exists($episode, 'season') || !property_exists($episode, 'episode')) {
|
if (!property_exists($ptn, 'season') || !property_exists($ptn, 'episode')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
81
src/Twig/Components/UpcomingEpisodes.php
Normal file
81
src/Twig/Components/UpcomingEpisodes.php
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Twig\Components;
|
||||||
|
|
||||||
|
use Aimeos\Map;
|
||||||
|
use App\Monitor\Dto\UpcomingEpisode;
|
||||||
|
use App\Monitor\Framework\Entity\Monitor;
|
||||||
|
use App\Tmdb\Tmdb;
|
||||||
|
use Carbon\CarbonImmutable;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
use Symfony\UX\TwigComponent\Attribute\AsTwigComponent;
|
||||||
|
use Tmdb\Model\Tv\Episode;
|
||||||
|
|
||||||
|
#[AsTwigComponent]
|
||||||
|
final class UpcomingEpisodes extends AbstractController
|
||||||
|
{
|
||||||
|
// Get active monitors
|
||||||
|
// Search TMDB for upcoming episodes
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
private readonly Tmdb $tmdb,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public function getUpcomingEpisodes(int $limit = 5): array
|
||||||
|
{
|
||||||
|
$upcomingEpisodes = new Map();
|
||||||
|
$monitors = $this->getMonitors();
|
||||||
|
foreach ($monitors as $monitor) {
|
||||||
|
$upcomingEpisodes->merge($this->getNextEpisodes($monitor));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $upcomingEpisodes->slice(0, $limit)->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getMonitors()
|
||||||
|
{
|
||||||
|
$user = $this->getUser();
|
||||||
|
return $user->getMonitors()->filter(
|
||||||
|
fn (Monitor $monitor) => null === $monitor->getParent() && $monitor->isActive()
|
||||||
|
) ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getNextEpisodes(Monitor $monitor): Map
|
||||||
|
{
|
||||||
|
$today = CarbonImmutable::now();
|
||||||
|
$seriesInfo = $this->tmdb->tvDetails($monitor->getTmdbId());
|
||||||
|
|
||||||
|
switch ($monitor->getMonitorType()) {
|
||||||
|
case "tvseason":
|
||||||
|
$episodes = Map::from($seriesInfo->episodes[$monitor->getSeason()])
|
||||||
|
->filter(function (array $episode) use ($today) {
|
||||||
|
$airDate = CarbonImmutable::parse($episode['air_date']);
|
||||||
|
return $airDate->lte($today);
|
||||||
|
})
|
||||||
|
;
|
||||||
|
break;
|
||||||
|
case "tvshows":
|
||||||
|
$episodes = [];
|
||||||
|
foreach ($seriesInfo->episodes as $season => $episodeList) {
|
||||||
|
$episodes = array_merge($episodes, $episodeList);
|
||||||
|
}
|
||||||
|
$episodes = Map::from($episodes)
|
||||||
|
->filter(function (array $episode) use ($today) {
|
||||||
|
$airDate = CarbonImmutable::parse($episode['air_date']);
|
||||||
|
return $airDate->gte($today);
|
||||||
|
})
|
||||||
|
;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $episodes->map(function (array $episode) use ($monitor) {
|
||||||
|
return new UpcomingEpisode(
|
||||||
|
$monitor->getTitle(),
|
||||||
|
$episode['air_date'],
|
||||||
|
$episode['name'],
|
||||||
|
$episode['episode_number'],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,6 +19,19 @@ class MonitorExtension
|
|||||||
return $types[$type] ?? '-';
|
return $types[$type] ?? '-';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[AsTwigFilter('as_download_type')]
|
||||||
|
public function monitorTypeToDownloadType(string $type)
|
||||||
|
{
|
||||||
|
$types = [
|
||||||
|
'tvshows' => 'tvshows',
|
||||||
|
'tvseason' => 'tvshows',
|
||||||
|
'tvepisode' => 'tvshows',
|
||||||
|
'movie' => 'movies',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $types[$type] ?? '-';
|
||||||
|
}
|
||||||
|
|
||||||
#[AsTwigFilter('monitor_media_id')]
|
#[AsTwigFilter('monitor_media_id')]
|
||||||
public function mediaId(Monitor $monitor)
|
public function mediaId(Monitor $monitor)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
<tr{{ attributes }} id="monitor_{{ monitor.id }}">
|
<tr{{ attributes }} id="monitor_{{ monitor.id }}" class="hover:bg-gray-200">
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-stone-800 truncate">
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-stone-800 truncate">
|
||||||
{{ monitor.title }}
|
<a href="{{ path('app_search_result', {imdbId: monitor.imdbId, mediaType: monitor.monitorType|as_download_type}) }}"
|
||||||
|
class="mr-1 hover:underline rounded-md"
|
||||||
|
>
|
||||||
|
{{ monitor.title }}
|
||||||
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
||||||
{{ monitor|monitor_media_id }}
|
{{ monitor|monitor_media_id }}
|
||||||
|
|||||||
11
templates/components/UpcomingEpisodes.html.twig
Normal file
11
templates/components/UpcomingEpisodes.html.twig
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<div{{ attributes }}>
|
||||||
|
<ul class="text-white flex flex-col gap-2">
|
||||||
|
{% for episode in this.upcomingEpisodes %}
|
||||||
|
<li class="flex flex-col">
|
||||||
|
<span class="bg-[#f98e44] bg-filter bg-blur-lg bg-opacity-100 text-gray-950 w-full p-[.1rem] pl-[.3rem] rounded-ms">{{ episode.title }}</span>
|
||||||
|
<span>{{ episode.episodeTitle }}</span>
|
||||||
|
<span>{{ episode.airDate }}</span>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
@@ -4,15 +4,22 @@
|
|||||||
{% block h2 %}Monitors{% endblock %}
|
{% block h2 %}Monitors{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="p-4">
|
<div class="flex flex-row">
|
||||||
<twig:Card title="Active Monitors">
|
|
||||||
<twig:MonitorList :type="'active'" :isWidget="false" :perPage="10"></twig:MonitorList>
|
<div class="p-2 flex flex-col gap-4">
|
||||||
</twig:Card>
|
<twig:Card title="Active Monitors">
|
||||||
</div>
|
<twig:MonitorList :type="'active'" :isWidget="false" :perPage="10"></twig:MonitorList>
|
||||||
|
</twig:Card>
|
||||||
|
<twig:Card title="Complete Monitors">
|
||||||
|
<twig:MonitorList :type="'complete'" :isWidget="false" :perPage="10"></twig:MonitorList>
|
||||||
|
</twig:Card>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="p-2">
|
||||||
|
<twig:Card title="Upcoming Episodes" >
|
||||||
|
<twig:UpcomingEpisodes />
|
||||||
|
</twig:Card>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="p-4">
|
|
||||||
<twig:Card title="Complete Monitors">
|
|
||||||
<twig:MonitorList :type="'complete'" :isWidget="false" :perPage="10"></twig:MonitorList>
|
|
||||||
</twig:Card>
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Reference in New Issue
Block a user