From ac281878ced6080a0c2e700c2da627a569032cce Mon Sep 17 00:00:00 2001 From: jvved Date: Thu, 30 Jan 2025 18:17:43 -0500 Subject: [PATCH] first commit --- .idea/.gitignore | 3 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/testpks.iml | 10 + .idea/vcs.xml | 6 + .read_stats.py.swo | Bin 0 -> 12288 bytes .read_stats.py.swp | Bin 0 -> 12288 bytes app1.ini | 13 ++ app2.ini | 12 + app3.ini | 12 + appX.ini | 13 ++ app_stats.py | 28 +++ foobar.py | 3 + lessons.py | 16 ++ read_stats.py | 143 ++++++++++++ read_stats2.py | 112 ++++++++++ requirements.txt | 4 + stats.py | 207 ++++++++++++++++++ sub1.ini | 8 + sub2.ini | 8 + text.txt | 4 + 22 files changed, 622 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/testpks.iml create mode 100644 .idea/vcs.xml create mode 100644 .read_stats.py.swo create mode 100644 .read_stats.py.swp create mode 100644 app1.ini create mode 100644 app2.ini create mode 100644 app3.ini create mode 100644 appX.ini create mode 100644 app_stats.py create mode 100644 foobar.py create mode 100644 lessons.py create mode 100644 read_stats.py create mode 100644 read_stats2.py create mode 100644 requirements.txt create mode 100644 stats.py create mode 100644 sub1.ini create mode 100644 sub2.ini create mode 100644 text.txt diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d460eee --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..af20f60 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/testpks.iml b/.idea/testpks.iml new file mode 100644 index 0000000..5c0fbc8 --- /dev/null +++ b/.idea/testpks.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.read_stats.py.swo b/.read_stats.py.swo new file mode 100644 index 0000000000000000000000000000000000000000..12505a7d447870d85f86a5bf7d60a6f438732474 GIT binary patch literal 12288 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 int: + try: + return int(self.subscription_server_address.split(":")[-1]) + except IndexError: + return 0 + + @pydantic.computed_field + def subscription_server_key(self) -> str: + # return f"{self.app_name}.pikesquares.dev:{self.subscription_server_port}" + print("subscription_server_key") + return f"{self.app_name}.pikesquares.dev" + + @pydantic.computed_field + def subscription_server_protocol(self) -> str: + return "http" if str(self.subscription_server_port).startswith("9") else "https" + + +class WsgiAppOptions(pydantic.BaseModel): + root_dir: Path + pyvenv_dir: Path + wsgi_file: Path + wsgi_module: str + routers: list[Router] = [] + project_id: str + workers: int = 3 + + +class RouterNode(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + name: str + modifier1: int + modifier2: int + last_check: int + pid: int + uid: int + gid: int + requests: int + last_requests: int + tx: int + rx: int + cores: int + load: int + weight: int + wrr: int + ref: int + failcnt: int + death_mark: int + + +class RouterSubscription(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + key: str # 'muffled-castle.pikesquares.dev:5700' + hash: int + hits: int = pydantic.Field(ge=0) + sni_enabled: int + nodes: list[RouterNode] + + +class RouterStats(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + version: str + pid: int = pydantic.Field(ge=0) + uid: int = pydantic.Field(ge=0) + gid: int = pydantic.Field(ge=0) + cwd: str + active_sessions: int = pydantic.Field(ge=0) + http: list[str] # ['0.0.0.0:8034', '127.0.0.1:5700'], + subscriptions: list[RouterSubscription] + cheap: int = pydantic.Field(ge=0) + + +class DeviceAppStats(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + id: str # "project_sandbox.json", + pid: int + born: int + last_mod: int + last_heartbeat: int + loyal: int + ready: int + accepting: int + last_loyal: int + last_ready: int + last_accepting: int + first_run: int + last_run: int + cursed: int + zerg: int + on_demand: str + uid: int + gid: int + monitor: str + respawns: int + + +class DeviceStats(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + version: str + pid: int = pydantic.Field(ge=0) + uid: int = pydantic.Field(ge=0) + gid: int = pydantic.Field(ge=0) + cwd: str + emperor: list[str] + emperor_tyrant: int + throttle_level: int + vassals: list[DeviceAppStats] + blacklist: list + + +class SocketStats(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + name: str # "127.0.0.1:4017" + proto: str # "uwsgi" + queue: int + max_queue: int + shared: int + can_offload: int + + +class WorkerAppStats(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + id: int + modifier1: int + mountpoint: str + startup_time: int + requests: int + exceptions: int + chdir: str + + +class WorkerCoresStats(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + id: int + requests: int + static_requests: int + routed_requests: int + offloaded_requests: int + write_errors: int + read_errors: int + in_request: int + vars: list + req_info: dict + + +class WorkerStats(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + id: int + pid: int + accepting: int + requests: int + delta_requests: int + exceptions: int + harakiri_count: int + signals: int + signal_queue: int + status: str # "idle", + rss: int + vsz: int + running_time: int + last_spawn: int + respawn_count: int + tx: int + avg_rt: int + apps: list[WorkerAppStats] + + +class AppStats(pydantic.BaseModel): + model_config = pydantic.ConfigDict(strict=True) + version: str + listen_queue: int + listen_queue_errors: int + signal_queue: int + load: int + pid: int + uid: int + gid: int + cwd: str + locks: list[dict[str, int]] + sockets: list[SocketStats] + workers: list[WorkerStats] diff --git a/sub1.ini b/sub1.ini new file mode 100644 index 0000000..8c1ce56 --- /dev/null +++ b/sub1.ini @@ -0,0 +1,8 @@ +[uwsgi] +strict=true +master=true +touch-reload=sub1.ini +vacuum=true +http=0.0.0.0:8934 +http-subscription-server=127.0.0.1:9700 +http-stats=run/sub1-stats.sock diff --git a/sub2.ini b/sub2.ini new file mode 100644 index 0000000..2b6a56c --- /dev/null +++ b/sub2.ini @@ -0,0 +1,8 @@ +[uwsgi] +strict=true +master=true +touch-reload=sub2.ini +vacuum=true +http=0.0.0.0:8935 +http-subscription-server=127.0.0.1:9701 +http-stats=run/sub2-stats.sock diff --git a/text.txt b/text.txt new file mode 100644 index 0000000..715374c --- /dev/null +++ b/text.txt @@ -0,0 +1,4 @@ +My name is Julia. +I live in NYC. +I study Python. +In my spare time I go to gym, run and watch movies on projector. \ No newline at end of file