From 8787a1ee2a4d1d52d975523c71de75631f81ca60 Mon Sep 17 00:00:00 2001 From: Matt Date: Sun, 15 Mar 2026 10:22:30 -0700 Subject: [PATCH] application working with php --- defaults/main.yaml | 8 ++-- files/api/Components.py | 12 +++-- files/api/component_descriptors.json | 2 +- files/proxy/nginx.conf | 34 +++++++------- files/web/html/{index.html => index.php} | 7 --- files/web/html/src/styles.css | 2 +- tasks/web.yaml | 20 ++++----- templates/docker-compose-php.yaml | 57 ++++++++++++++++++++++++ 8 files changed, 98 insertions(+), 44 deletions(-) rename files/web/html/{index.html => index.php} (76%) create mode 100644 templates/docker-compose-php.yaml diff --git a/defaults/main.yaml b/defaults/main.yaml index fa4e99e..e5afa37 100644 --- a/defaults/main.yaml +++ b/defaults/main.yaml @@ -33,7 +33,7 @@ docker_subnet: "192.168.37.0/24" docker_gateway: "192.168.37.1" # cosmostat service folder root -service_folder: "/opt/cosmos/cosmostat" +service_folder: "/opt/cosmostat" # cosmostat will run under cosmos user service_user: "cosmos" @@ -53,10 +53,10 @@ quick_refresh: false # cosmostat_settings noisy_test: false -debug_output: true -secure_api: false +debug_output: false +secure_api: true push_redis: true run_background : true log_output: true -update_frequency: "1" +update_frequency: "2" ... \ No newline at end of file diff --git a/files/api/Components.py b/files/api/Components.py index 2145458..65d223b 100644 --- a/files/api/Components.py +++ b/files/api/Components.py @@ -68,7 +68,9 @@ class Component: for key, command in self._descriptor.get('metrics', {}).items(): if self.this_device != "None": formatted_command = command.format(this_device=self.this_device) - self._properties[key] = run_command(formatted_command, True) + this_metric = run_command(formatted_command, True) + if this_metric is not None: + self._metrics[key] = this_metric else: self._metrics[key] = run_command(command, True) @@ -113,13 +115,15 @@ class Component: # returns array of dicts for redis def get_metrics_keys(self): result = [] + empty_value = ["", "null", None, []] for name, value in self._metrics.items(): this_metric = { "name": self.name, "type": name, "metric": value } - result.append(this_metric) + if value not in empty_value: + result.append(this_metric) return result def get_properties_keys(self): @@ -220,13 +224,13 @@ class System: multi_check = component["multi_check"] # if multi, note that the command in device_list creates the list of things to pipe into this_device if multi_check: - letters = [chr(c) for c in range(ord('a'), ord('z')+1)] + letters = [chr(c) for c in range(ord('A'), ord('Z')+1)] print(f"Creating one component of type {component_name} for each one found") component_type_device_list = get_device_list(component_name) for this_device in component_type_device_list: this_component_letter = letters[component_type_device_list.index(this_device)] - this_component_name = f"{this_device}_{this_component_letter}" + this_component_name = f"{component_name} {this_component_letter}" print(f"{this_component_name} - {component_name} - {this_device}") self.add_components(Component(this_component_name, component_name, this_device)) diff --git a/files/api/component_descriptors.json b/files/api/component_descriptors.json index 13945a1..6ec1667 100644 --- a/files/api/component_descriptors.json +++ b/files/api/component_descriptors.json @@ -27,7 +27,7 @@ } }, { - "name": "Block_Storage", + "name": "Block Storage", "description": "{device_id} is of type {drive_type} with capacity of {drive_capacity}.", "multi_check": "True", "device_list": "lsblk -d -o NAME,SIZE | grep -v -e 0B -e NAME | awk '{print $1}'", diff --git a/files/proxy/nginx.conf b/files/proxy/nginx.conf index eecafeb..d0c06ad 100644 --- a/files/proxy/nginx.conf +++ b/files/proxy/nginx.conf @@ -11,30 +11,30 @@ listen 80; server_name localhost; # -------------------------------------------------------------------- -# Proxy everything under "/" to the Node backend +# Proxy everything under "/" to the php server backend # -------------------------------------------------------------------- location / { - proxy_pass http://172.17.0.1:3000; + proxy_pass http://192.168.37.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } +# ----- Custom Nginx Configuration (inside block) ----- +location /socket.io/ { + # Forward to the Node WS server + proxy_pass http://192.168.37.1:3000; # or -# -------------------------------------------------------------------- -# Proxy everything under "/history" to the Apache backend -# This is off for now -# -------------------------------------------------------------------- -#location /history/ { -# proxy_pass http://172.17.0.1:8080/; -# proxy_set_header Host $host; -# proxy_set_header X-Real-IP $remote_addr; -# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; -#} + # Keep WebSocket upgrade headers + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + # Optional: pass on other headers you care about + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; +} -# Optional: If you want `/history` (without trailing slash) to be -# redirected to `/history/`: -#location = /history { -# return 301 /history/; -#} } \ No newline at end of file diff --git a/files/web/html/index.html b/files/web/html/index.php similarity index 76% rename from files/web/html/index.html rename to files/web/html/index.php index 010ed9a..1ad2ee5 100644 --- a/files/web/html/index.html +++ b/files/web/html/index.php @@ -17,13 +17,6 @@
Connecting…
- diff --git a/files/web/html/src/styles.css b/files/web/html/src/styles.css index 1c4ad27..b938f79 100644 --- a/files/web/html/src/styles.css +++ b/files/web/html/src/styles.css @@ -117,5 +117,5 @@ li { #host_metrics_table tbody tr td :nth-of-type(even) { - background-color: #23384e; + background-color: #2c3e50; } diff --git a/tasks/web.yaml b/tasks/web.yaml index 3fc52bd..be935da 100644 --- a/tasks/web.yaml +++ b/tasks/web.yaml @@ -12,7 +12,7 @@ owner: "{{ service_user }}" group: "{{ service_user }}" -- name: Cosmostat - Init - node.js - copy dashboard files +- name: Cosmostat - Init - copy dashboard web files copy: src: "web/html" dest: "{{ service_control_web_folder }}/" @@ -28,21 +28,21 @@ # mode: 0755 # owner: "{{ service_user }}" # group: "{{ service_user }}" -# -#- name: Cosmostat - Web - copy files for proxy container -# copy: -# src: "proxy/" -# dest: "{{ service_control_web_folder }}/proxy" -# mode: 0755 -# owner: "{{ service_user }}" -# group: "{{ service_user }}" + +- name: Cosmostat - Web - copy files for proxy container + copy: + src: "proxy/" + dest: "{{ service_control_web_folder }}/proxy" + mode: 0755 + owner: "{{ service_user }}" + group: "{{ service_user }}" - name: docker container handler block: - name: Cosmostat - Web - template docker-compose.yaml template: - src: docker-compose.yaml + src: docker-compose-php.yaml dest: "{{ service_control_web_folder }}/docker-compose.yaml" mode: 0644 diff --git a/templates/docker-compose-php.yaml b/templates/docker-compose-php.yaml new file mode 100644 index 0000000..c843456 --- /dev/null +++ b/templates/docker-compose-php.yaml @@ -0,0 +1,57 @@ +services: + + cosmostat_redis: + container_name: cosmostat_redis + image: redis:7-alpine + ports: + - "{{ docker_gateway }}:6379:6379" + networks: + - cosmostat_net + restart: always + + cosmostat_ws_node: + container_name: cosmostat_ws_node + build: + context: "{{ service_control_web_folder }}/node_server" + dockerfile: Dockerfile + image: ws_node:latest + ports: + - "{{ (docker_gateway + ':') if secure_api else '' }}3000:3000" + networks: + - cosmostat_net + restart: always + depends_on: + - cosmostat_redis + + cosmostat_web_dash: + container_name: cosmostat_web_dash + image: php:8.0-apache + ports: + - "{{ (docker_gateway + ':') if secure_api else '' }}8080:80" + volumes: + - ./html:/var/www/html/ + networks: + - cosmostat_net + restart: always + + cosmostat_nginx_proxy: + container_name: cosmostat_nginx_proxy + image: nginx:latest + ports: + - "{{ (docker_gateway + ':') if secure_api else '' }}80:80" + volumes: + - ./proxy/nginx.conf:/etc/nginx/conf.d/default.conf + networks: + - cosmostat_net + restart: always + depends_on: + - cosmostat_web_dash + - cosmostat_ws_node + + + +networks: + cosmostat_net: + external: true + +