This commit is contained in:
Marsway 2026-01-05 16:33:29 +08:00
parent 537c54df14
commit dd18dcd9de
1295 changed files with 1183 additions and 17 deletions

2
.env
View File

@ -1,6 +1,6 @@
APP_NAME=ConnectHub APP_NAME=ConnectHub
DATA_DIR=/data DATA_DIR=/data
DB_URL=sqlite:////data/connecthub.db DB_URL=postgresql+psycopg://connecthub:connecthub_pwd_change_me@postgres:5432/connecthub
REDIS_URL=redis://redis:6379/0 REDIS_URL=redis://redis:6379/0
FERNET_KEY_PATH=/data/fernet.key FERNET_KEY_PATH=/data/fernet.key
DEV_MODE=1 DEV_MODE=1

View File

@ -48,7 +48,7 @@ ConnectHub 是一个轻量级企业集成中间件:统一管理多系统集成
- `env.example`:环境变量示例(由于环境限制,仓库中使用该文件名;本地运行时请手动创建 `.env` 并参考此文件) - `env.example`:环境变量示例(由于环境限制,仓库中使用该文件名;本地运行时请手动创建 `.env` 并参考此文件)
- 关键变量: - 关键变量:
- `DATA_DIR=/data`:容器内数据目录 - `DATA_DIR=/data`:容器内数据目录
- `DB_URL=sqlite:////data/connecthub.db`SQLite DB 文件 - `DB_URL=postgresql+psycopg://connecthub:connecthub_pwd_change_me@postgres:5432/connecthub`PostgreSQL 连接串(容器内通过 service name `postgres` 访问)
- `REDIS_URL=redis://redis:6379/0`Celery Broker/Backend - `REDIS_URL=redis://redis:6379/0`Celery Broker/Backend
- `FERNET_KEY_PATH=/data/fernet.key`Fernet key 文件(自动生成并持久化) - `FERNET_KEY_PATH=/data/fernet.key`Fernet key 文件(自动生成并持久化)
- `LOG_DIR=/data/logs`:日志目录(可选) - `LOG_DIR=/data/logs`:日志目录(可选)

View File

@ -8,7 +8,7 @@ class Settings(BaseSettings):
app_name: str = "ConnectHub" app_name: str = "ConnectHub"
data_dir: str = "/data" data_dir: str = "/data"
db_url: str = "sqlite:////data/connecthub.db" db_url: str = "postgresql+psycopg://connecthub:connecthub_pwd_change_me@postgres:5432/connecthub"
redis_url: str = "redis://redis:6379/0" redis_url: str = "redis://redis:6379/0"
fernet_key_path: str = "/data/fernet.key" fernet_key_path: str = "/data/fernet.key"
dev_mode: bool = False dev_mode: bool = False

View File

@ -6,11 +6,11 @@ from sqlalchemy.orm import Session, sessionmaker
from app.core.config import settings from app.core.config import settings
engine = create_engine( _kwargs = {"future": True}
settings.db_url, if settings.db_url.startswith("sqlite"):
connect_args={"check_same_thread": False} if settings.db_url.startswith("sqlite") else {}, _kwargs["connect_args"] = {"check_same_thread": False}
future=True,
) engine = create_engine(settings.db_url, **_kwargs)
SessionLocal = sessionmaker(bind=engine, class_=Session, autoflush=False, autocommit=False, future=True) SessionLocal = sessionmaker(bind=engine, class_=Session, autoflush=False, autocommit=False, future=True)

View File

@ -1,26 +1,27 @@
from __future__ import annotations from __future__ import annotations
from sqlalchemy import Engine, text from sqlalchemy import Engine, inspect, text
from app.db.models import Base from app.db.models import Base
def _has_column(conn, table: str, col: str) -> bool: def _has_column(engine: Engine, table: str, col: str) -> bool:
rows = conn.execute(text(f"PRAGMA table_info({table})")).fetchall() insp = inspect(engine)
return any(r[1] == col for r in rows) # PRAGMA columns: (cid, name, type, notnull, dflt_value, pk) cols = insp.get_columns(table)
return any(c.get("name") == col for c in cols)
def ensure_schema(engine: Engine) -> None: def ensure_schema(engine: Engine) -> None:
""" """
SQLite 轻量自升级 轻量自升级 SQLite/PostgreSQL
- create_all 不会更新既有表结构因此用 PRAGMA + ALTER TABLE 补列 - create_all 不会更新既有表结构因此用 inspector + ALTER TABLE 补列
- 必须保证任何失败都不影响主流程上层可选择忽略异常 - 必须保证任何失败都不影响主流程上层可选择忽略异常
""" """
Base.metadata.create_all(bind=engine) Base.metadata.create_all(bind=engine)
with engine.begin() as conn: with engine.begin() as conn:
# job_logs.run_log # job_logs.run_log
if not _has_column(conn, "job_logs", "run_log"): if not _has_column(engine, "job_logs", "run_log"):
conn.execute(text("ALTER TABLE job_logs ADD COLUMN run_log TEXT NOT NULL DEFAULT ''")) conn.execute(text("ALTER TABLE job_logs ADD COLUMN run_log TEXT NOT NULL DEFAULT ''"))

Binary file not shown.

View File

@ -1448,3 +1448,114 @@ sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table job_logs has n
2026-01-05 06:58:34 INFO celery.app.trace Task connecthub.dispatcher.tick[143002e6-4b46-4a31-b1f4-70675d23b19f] succeeded in 0.03738421500020195s: {'triggered': 1} 2026-01-05 06:58:34 INFO celery.app.trace Task connecthub.dispatcher.tick[143002e6-4b46-4a31-b1f4-70675d23b19f] succeeded in 0.03738421500020195s: {'triggered': 1}
2026-01-05 06:58:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True} 2026-01-05 06:58:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 06:58:34 INFO celery.app.trace Task connecthub.execute_job[084d9592-8969-4ab9-b708-22df5f7c68c4] succeeded in 0.048200376999375294s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'} 2026-01-05 06:58:34 INFO celery.app.trace Task connecthub.execute_job[084d9592-8969-4ab9-b708-22df5f7c68c4] succeeded in 0.048200376999375294s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 06:59:34 INFO celery.app.trace Task connecthub.dispatcher.tick[7ff35c94-bfc9-49d1-998b-c77a50a6b2f2] succeeded in 0.03243898700020509s: {'triggered': 1}
2026-01-05 06:59:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 06:59:34 INFO celery.app.trace Task connecthub.execute_job[52d3edb3-bb34-443b-9a02-b99f8b98fdfe] succeeded in 0.04806670699872484s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:00:34 INFO celery.app.trace Task connecthub.dispatcher.tick[90f39045-9e06-4671-9219-05cb8b5a0edc] succeeded in 0.038366259999747854s: {'triggered': 1}
2026-01-05 07:00:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:00:34 INFO celery.app.trace Task connecthub.execute_job[48e996bd-1af6-4bb9-8094-12b9838ef9d7] succeeded in 0.05399127200143994s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:01:34 INFO celery.app.trace Task connecthub.dispatcher.tick[5a916c6c-9648-4948-a64c-0101db1ad06d] succeeded in 0.03205773700028658s: {'triggered': 1}
2026-01-05 07:01:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:01:34 INFO celery.app.trace Task connecthub.execute_job[c3124b54-260d-4977-9ea6-6d67af4163fa] succeeded in 0.026716010999734863s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:02:34 INFO celery.app.trace Task connecthub.dispatcher.tick[aa7e49e0-aade-4a3c-8c67-28c302d0befc] succeeded in 0.019925194001189084s: {'triggered': 1}
2026-01-05 07:02:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:02:34 INFO celery.app.trace Task connecthub.execute_job[1615b86e-8ac7-472e-a0e0-acfe97d9c5d0] succeeded in 0.0280346819999977s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:03:34 INFO celery.app.trace Task connecthub.dispatcher.tick[ad6bb604-2563-4abb-b392-fa837c20bd6d] succeeded in 0.017531310999402194s: {'triggered': 1}
2026-01-05 07:03:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:03:34 INFO celery.app.trace Task connecthub.execute_job[a5d2a716-0e8f-42a7-9bf1-a8a20bc142d5] succeeded in 0.02709092799887003s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:04:34 INFO celery.app.trace Task connecthub.dispatcher.tick[e90e2dc8-5944-48a7-a66c-f8638e5d04f4] succeeded in 0.02161186800003634s: {'triggered': 1}
2026-01-05 07:04:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:04:34 INFO celery.app.trace Task connecthub.execute_job[c17f8213-ac1e-4cf4-adcb-28804393bc86] succeeded in 0.032682656001270516s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:05:34 INFO celery.app.trace Task connecthub.dispatcher.tick[f99e67e5-9f66-4364-8e29-6b7d6525347d] succeeded in 0.01887406600144459s: {'triggered': 1}
2026-01-05 07:05:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:05:34 INFO celery.app.trace Task connecthub.execute_job[bd4635ef-e983-44be-ba9c-4f0a2ebaaa3a] succeeded in 0.022113120001449715s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:06:34 INFO celery.app.trace Task connecthub.dispatcher.tick[53fd9458-503d-42d9-a087-0546683eba9e] succeeded in 0.03372136800135195s: {'triggered': 1}
2026-01-05 07:06:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:06:34 INFO celery.app.trace Task connecthub.execute_job[8a6c0db9-95e1-4c43-9836-71f986c0a9bd] succeeded in 0.0460546609992889s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:07:34 INFO celery.app.trace Task connecthub.dispatcher.tick[e9ee6e27-7f5e-4c06-b466-fe9dedbbca64] succeeded in 0.01709246499922301s: {'triggered': 1}
2026-01-05 07:07:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:07:34 INFO celery.app.trace Task connecthub.execute_job[366f4a43-3657-4e0c-b687-65eb35a56b70] succeeded in 0.02782860400111531s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:08:34 INFO celery.app.trace Task connecthub.dispatcher.tick[f65b4b96-df13-4642-a56e-744b1ad4c03f] succeeded in 0.02342866399885679s: {'triggered': 1}
2026-01-05 07:08:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:08:34 INFO celery.app.trace Task connecthub.execute_job[b684dd70-e535-4301-b024-5f8f0de56357] succeeded in 0.03189004199884948s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:09:34 INFO celery.app.trace Task connecthub.dispatcher.tick[ac962744-3b68-45f8-ae94-03b8df961538] succeeded in 0.04561478100004024s: {'triggered': 1}
2026-01-05 07:09:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:09:34 INFO celery.app.trace Task connecthub.execute_job[59787b28-abd5-4321-b19f-f879aca9fdbf] succeeded in 0.14826150599765242s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:10:34 INFO celery.app.trace Task connecthub.dispatcher.tick[45df624d-a1a5-4c86-8f97-1dbcaea56512] succeeded in 0.022940203998587094s: {'triggered': 1}
2026-01-05 07:10:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:10:34 INFO celery.app.trace Task connecthub.execute_job[b753b080-0bfe-4b95-a92a-0ff85323d9c7] succeeded in 0.07180132800203864s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:11:34 INFO celery.app.trace Task connecthub.dispatcher.tick[a27214e6-1037-4c97-a4c4-3a7f99783b92] succeeded in 0.02962792700054706s: {'triggered': 1}
2026-01-05 07:11:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:11:34 INFO celery.app.trace Task connecthub.execute_job[912d265e-15c3-46cf-9276-e7bb0929e214] succeeded in 0.03631957200195757s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:12:34 INFO celery.app.trace Task connecthub.dispatcher.tick[9af4b828-be86-410a-9ca5-fe332bab27dc] succeeded in 0.014524588001222583s: {'triggered': 1}
2026-01-05 07:12:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:12:34 INFO celery.app.trace Task connecthub.execute_job[b7a85791-3044-4021-904f-4b238580bb89] succeeded in 0.026003581999248127s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:13:34 INFO celery.app.trace Task connecthub.dispatcher.tick[e102d4e8-945f-4fb8-93a0-a447ddd8659f] succeeded in 0.02607237199845258s: {'triggered': 1}
2026-01-05 07:13:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:13:34 INFO celery.app.trace Task connecthub.execute_job[075a86e1-d13f-4752-a7f1-e2f7873c37ac] succeeded in 0.029601174999697832s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:14:34 INFO celery.app.trace Task connecthub.dispatcher.tick[69e56507-4ae2-4edd-95b0-971ea3e11219] succeeded in 0.013464292002026923s: {'triggered': 1}
2026-01-05 07:14:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:14:34 INFO celery.app.trace Task connecthub.execute_job[03bd0d9e-0cbe-4281-9b7b-01fc9f82072f] succeeded in 0.019281809996755328s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:15:34 INFO celery.app.trace Task connecthub.dispatcher.tick[5b7d27ef-7633-44ad-8b80-5a750f8131b6] succeeded in 0.025849912999547087s: {'triggered': 1}
2026-01-05 07:15:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:15:34 INFO celery.app.trace Task connecthub.execute_job[fe2ae17f-3714-4d30-9ba8-aeea0abcf8e6] succeeded in 0.02281211199806421s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:16:34 INFO celery.app.trace Task connecthub.dispatcher.tick[d010c1d2-aa4b-42b4-9c67-5050e2bd10c3] succeeded in 0.02714045899847406s: {'triggered': 1}
2026-01-05 07:16:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:16:34 INFO celery.app.trace Task connecthub.execute_job[295454cf-3344-484d-aad4-520f1c3de033] succeeded in 0.027329376000125194s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:17:34 INFO celery.app.trace Task connecthub.dispatcher.tick[37162304-22b1-48ef-9b99-001c635ebb99] succeeded in 0.020508688998233993s: {'triggered': 1}
2026-01-05 07:17:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:17:34 INFO celery.app.trace Task connecthub.execute_job[1c1192a4-84b7-42f3-965b-ad6671707a5c] succeeded in 0.03159668099760893s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:18:34 INFO celery.app.trace Task connecthub.dispatcher.tick[a32af444-b4c9-4819-9970-02c65bd1e757] succeeded in 0.02585999599978095s: {'triggered': 1}
2026-01-05 07:18:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:18:34 INFO celery.app.trace Task connecthub.execute_job[44cd4190-4184-4aae-afc4-eb06e7eeee48] succeeded in 0.03663523799696122s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:19:34 INFO celery.app.trace Task connecthub.dispatcher.tick[61b03d5e-f205-4c54-bab1-ff8042570ef0] succeeded in 0.028314295999734895s: {'triggered': 1}
2026-01-05 07:19:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:19:34 INFO celery.app.trace Task connecthub.execute_job[b1d9ff91-35ca-49b1-8a9b-d990ccbf2846] succeeded in 0.044955306002520956s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:20:34 INFO celery.app.trace Task connecthub.dispatcher.tick[07c9ab13-1364-4fc6-9b4e-0169b78715aa] succeeded in 0.02093082400097046s: {'triggered': 1}
2026-01-05 07:20:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:20:34 INFO celery.app.trace Task connecthub.execute_job[e45a0067-a289-49e7-8b04-2868fb79fcd7] succeeded in 0.03268894699795055s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:21:34 INFO celery.app.trace Task connecthub.dispatcher.tick[2a287e90-d8ee-42c0-8e5b-8446a42510fd] succeeded in 0.013471963997290004s: {'triggered': 1}
2026-01-05 07:21:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:21:34 INFO celery.app.trace Task connecthub.execute_job[be610ca7-2456-488e-9fd6-1855968cde0e] succeeded in 0.025365213998156833s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:22:34 INFO celery.app.trace Task connecthub.dispatcher.tick[a16da9cc-df85-41b2-b77c-44102a9911fc] succeeded in 0.024838377998094074s: {'triggered': 1}
2026-01-05 07:22:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:22:34 INFO celery.app.trace Task connecthub.execute_job[206d7957-69e0-49d2-a08c-2523c6464a70] succeeded in 0.03043731499928981s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:23:34 INFO celery.app.trace Task connecthub.dispatcher.tick[0f3a749d-ae12-463f-a3ac-742693d4e4f4] succeeded in 0.020584404999681283s: {'triggered': 1}
2026-01-05 07:23:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:23:34 INFO celery.app.trace Task connecthub.execute_job[b7661a3e-7fe4-4af9-993b-9e24a49cfdd1] succeeded in 0.029729271001997404s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:24:34 INFO celery.app.trace Task connecthub.dispatcher.tick[2403b420-8a06-4e4f-bac1-4c944c8ff448] succeeded in 0.018341153998335358s: {'triggered': 1}
2026-01-05 07:24:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:24:34 INFO celery.app.trace Task connecthub.execute_job[067b53a0-20bc-44e7-8a10-66a81f63a9f2] succeeded in 0.024221301999205025s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:25:34 INFO celery.app.trace Task connecthub.dispatcher.tick[5cf1ba97-dd9a-4641-b34a-0c29638f7408] succeeded in 0.03626087700104108s: {'triggered': 1}
2026-01-05 07:25:34 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:25:34 INFO celery.app.trace Task connecthub.execute_job[1455c523-12e9-49b2-9f2f-34e7296882ec] succeeded in 0.07351421699786442s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:26:59 INFO celery.app.trace Task connecthub.dispatcher.tick[458aeb6f-bbce-4379-95ee-c136170cc172] succeeded in 0.04191194200029713s: {'triggered': 1}
2026-01-05 07:26:59 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:26:59 INFO celery.app.trace Task connecthub.execute_job[06d7c172-6a41-4fd4-8460-3288078a9cfb] succeeded in 0.09415871100281947s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:27:59 INFO celery.app.trace Task connecthub.dispatcher.tick[168fca0f-d849-4992-bafd-7c73052ee3de] succeeded in 0.027694890002749162s: {'triggered': 1}
2026-01-05 07:27:59 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:27:59 INFO celery.app.trace Task connecthub.execute_job[8aa7ef10-2a4f-4238-b1d2-fcde70f320b4] succeeded in 0.03736271600064356s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:28:59 INFO celery.app.trace Task connecthub.dispatcher.tick[32df4b13-38a9-4b5b-aa5f-aa55d17bab77] succeeded in 0.02644388800035813s: {'triggered': 1}
2026-01-05 07:28:59 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:28:59 INFO celery.app.trace Task connecthub.execute_job[cf87d1ca-f7ab-4951-8794-d67098b157b7] succeeded in 0.028943772002094192s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:29:59 INFO celery.app.trace Task connecthub.dispatcher.tick[42a1fba8-ad36-4f78-847d-7360bac5f905] succeeded in 0.048216461000265554s: {'triggered': 1}
2026-01-05 07:29:59 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:29:59 INFO celery.app.trace Task connecthub.execute_job[8eef1b0f-f37f-4365-8cee-c0d220b0adbe] succeeded in 0.0404999759994098s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:30:59 INFO celery.app.trace Task connecthub.dispatcher.tick[69538a4f-ac45-425d-987d-0891527995a3] succeeded in 0.032709241000702605s: {'triggered': 1}
2026-01-05 07:30:59 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:30:59 INFO celery.app.trace Task connecthub.execute_job[7499f973-6d14-4f0f-b20e-492c865709b3] succeeded in 0.03217836399926455s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:31:59 INFO celery.app.trace Task connecthub.dispatcher.tick[783a57ae-d1ae-444c-9b9b-718d5908639b] succeeded in 0.029248186998302117s: {'triggered': 1}
2026-01-05 07:31:59 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:31:59 INFO celery.app.trace Task connecthub.execute_job[d8a04eb5-d021-4e0b-9d87-1544951949f4] succeeded in 0.02702434499951778s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:32:07 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:32:07 INFO celery.app.trace Task connecthub.execute_job[71161bb9-febf-4409-8f4e-7601439f56d8] succeeded in 0.11532257499857224s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 07:32:59 INFO celery.app.trace Task connecthub.dispatcher.tick[7ba62cf7-b6b9-4998-b2c2-e6e544f8dd30] succeeded in 0.026650135998352198s: {'triggered': 1}
2026-01-05 07:32:59 INFO connecthub.extensions.example ExampleJob ran name=World pong={'ok': True}
2026-01-05 07:32:59 INFO celery.app.trace Task connecthub.execute_job[6aa7b574-32ab-4e4f-9bbe-f9a2214281d3] succeeded in 0.026641177999408683s: {'status': 'SUCCESS', 'job_id': 'demo.test', 'result': {'hello': 'World', 'pong': {'ok': True}}, 'message': 'OK'}
2026-01-05 08:26:48 INFO celery.app.trace Task connecthub.dispatcher.tick[2c0832f8-c476-405d-a20d-d1fb39b81eb6] succeeded in 0.03208297799938009s: {'triggered': 0}
2026-01-05 08:27:48 INFO celery.app.trace Task connecthub.dispatcher.tick[cab9ed3d-4301-4f30-94eb-8e400619af06] succeeded in 0.0120048989992938s: {'triggered': 0}
2026-01-05 08:28:48 INFO celery.app.trace Task connecthub.dispatcher.tick[7053b804-fb5c-453d-87dc-e86d0dd86a42] succeeded in 0.015613408999342937s: {'triggered': 0}
2026-01-05 08:29:48 INFO celery.app.trace Task connecthub.dispatcher.tick[83431ec2-78d7-4ea8-a603-00970dcae994] succeeded in 0.023675174001255073s: {'triggered': 0}
2026-01-05 08:30:48 INFO celery.app.trace Task connecthub.dispatcher.tick[9e85b13a-081d-4611-bd79-3decab4e5998] succeeded in 0.016073361999588087s: {'triggered': 0}
2026-01-05 08:31:48 INFO celery.app.trace Task connecthub.dispatcher.tick[4e76d621-3ed7-4002-b1f2-1766b699218c] succeeded in 0.01640211099947919s: {'triggered': 0}
2026-01-05 08:32:48 INFO celery.app.trace Task connecthub.dispatcher.tick[62d2e1ea-02c8-4dcd-bf97-a3e4f4d1dfda] succeeded in 0.015914567997242557s: {'triggered': 0}

1
data/pgdata/PG_VERSION Normal file
View File

@ -0,0 +1 @@
16

BIN
data/pgdata/base/1/112 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/113 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1247 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1247_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1247_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1249 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1249_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1249_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1255 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1255_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1255_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1259 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1259_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/1259_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/13457 Normal file

Binary file not shown.

Binary file not shown.

BIN
data/pgdata/base/1/13457_vm Normal file

Binary file not shown.

0
data/pgdata/base/1/13460 Normal file
View File

BIN
data/pgdata/base/1/13461 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/13462 Normal file

Binary file not shown.

Binary file not shown.

BIN
data/pgdata/base/1/13462_vm Normal file

Binary file not shown.

0
data/pgdata/base/1/13465 Normal file
View File

BIN
data/pgdata/base/1/13466 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/13467 Normal file

Binary file not shown.

Binary file not shown.

BIN
data/pgdata/base/1/13467_vm Normal file

Binary file not shown.

0
data/pgdata/base/1/13470 Normal file
View File

BIN
data/pgdata/base/1/13471 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/13472 Normal file

Binary file not shown.

Binary file not shown.

BIN
data/pgdata/base/1/13472_vm Normal file

Binary file not shown.

0
data/pgdata/base/1/13475 Normal file
View File

BIN
data/pgdata/base/1/13476 Normal file

Binary file not shown.

0
data/pgdata/base/1/1417 Normal file
View File

0
data/pgdata/base/1/1418 Normal file
View File

BIN
data/pgdata/base/1/174 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/175 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2187 Normal file

Binary file not shown.

0
data/pgdata/base/1/2224 Normal file
View File

BIN
data/pgdata/base/1/2228 Normal file

Binary file not shown.

0
data/pgdata/base/1/2328 Normal file
View File

0
data/pgdata/base/1/2336 Normal file
View File

BIN
data/pgdata/base/1/2337 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2579 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2600 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2600_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2600_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2601 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2601_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2601_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2602 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2602_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2602_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2603 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2603_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2603_vm Normal file

Binary file not shown.

0
data/pgdata/base/1/2604 Normal file
View File

BIN
data/pgdata/base/1/2605 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2605_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2605_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2606 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2606_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2606_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2607 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2607_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2607_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2608 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2608_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2608_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2609 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2609_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2609_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2610 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2610_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2610_vm Normal file

Binary file not shown.

0
data/pgdata/base/1/2611 Normal file
View File

BIN
data/pgdata/base/1/2612 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2612_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2612_vm Normal file

Binary file not shown.

0
data/pgdata/base/1/2613 Normal file
View File

BIN
data/pgdata/base/1/2615 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2615_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2615_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2616 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2616_fsm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2616_vm Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2617 Normal file

Binary file not shown.

BIN
data/pgdata/base/1/2617_fsm Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More