更新API接口
Some checks failed
Agent Tests / Lint and Format (push) Has been cancelled
Agent Tests / Unit Tests (push) Has been cancelled

This commit is contained in:
jingrow 2025-06-27 15:34:18 +08:00
parent ad9cf38f12
commit bed55db16f
6 changed files with 2437 additions and 2437 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
import requests import requests
def callback(job, connection, result, *args, **kwargs): def callback(job, connection, result, *args, **kwargs):
from agent.server import Server from agent.server import Server
jcloud_url = Server().jcloud_url jcloud_url = Server().jcloud_url
requests.post(url=f"{jcloud_url}/api/method/jcloud.api.callbacks.callback", data={"job_id": job.id}) requests.post(url=f"{jcloud_url}/api/action/jcloud.api.callbacks.callback", data={"job_id": job.id})

View File

@ -1,114 +1,114 @@
from __future__ import annotations from __future__ import annotations
import os import os
import tempfile import tempfile
import requests import requests
from agent.server import Server from agent.server import Server
class Monitor(Server): class Monitor(Server):
def __init__(self, directory=None): def __init__(self, directory=None):
super().__init__(directory=directory) super().__init__(directory=directory)
self.prometheus_directory = "/home/jingrow/prometheus" self.prometheus_directory = "/home/jingrow/prometheus"
self.alertmanager_directory = "/home/jingrow/alertmanager" self.alertmanager_directory = "/home/jingrow/alertmanager"
def update_rules(self, rules): def update_rules(self, rules):
rules_file = os.path.join(self.prometheus_directory, "rules", "agent.yml") rules_file = os.path.join(self.prometheus_directory, "rules", "agent.yml")
self._render_template( self._render_template(
"prometheus/rules.yml", "prometheus/rules.yml",
{"rules": rules}, {"rules": rules},
rules_file, rules_file,
{ {
"variable_start_string": "###", "variable_start_string": "###",
"variable_end_string": "###", "variable_end_string": "###",
}, },
) )
promtool = os.path.join(self.prometheus_directory, "promtool") promtool = os.path.join(self.prometheus_directory, "promtool")
self.execute(f"{promtool} check rules {rules_file}") self.execute(f"{promtool} check rules {rules_file}")
self.execute("sudo systemctl reload prometheus") self.execute("sudo systemctl reload prometheus")
def update_routes(self, routes): def update_routes(self, routes):
config_file = os.path.join(self.alertmanager_directory, "alertmanager.yml") config_file = os.path.join(self.alertmanager_directory, "alertmanager.yml")
self._render_template( self._render_template(
"alertmanager/routes.yml", "alertmanager/routes.yml",
{"routes": routes}, {"routes": routes},
config_file, config_file,
{ {
"variable_start_string": "###", "variable_start_string": "###",
"variable_end_string": "###", "variable_end_string": "###",
}, },
) )
amtool = os.path.join(self.alertmanager_directory, "amtool") amtool = os.path.join(self.alertmanager_directory, "amtool")
self.execute(f"{amtool} check-config {config_file}") self.execute(f"{amtool} check-config {config_file}")
self.execute("sudo systemctl reload alertmanager") self.execute("sudo systemctl reload alertmanager")
def discover_targets(self): def discover_targets(self):
targets = self.fetch_targets() targets = self.fetch_targets()
for cluster in targets["clusters"]: for cluster in targets["clusters"]:
self.generate_prometheus_cluster_config(cluster) self.generate_prometheus_cluster_config(cluster)
self.generate_prometheus_tls_config(targets["tls"]) self.generate_prometheus_tls_config(targets["tls"])
self.generate_prometheus_sites_config(targets["benches"]) self.generate_prometheus_sites_config(targets["benches"])
self.generate_prometheus_domains_config(targets["domains"]) self.generate_prometheus_domains_config(targets["domains"])
def fetch_targets(self): def fetch_targets(self):
jcloud_url = self.config.get("jcloud_url") jcloud_url = self.config.get("jcloud_url")
jcloud_token = self.config.get("jcloud_token") jcloud_token = self.config.get("jcloud_token")
return requests.post( return requests.post(
f"{jcloud_url}/api/method/jcloud.api.monitoring.targets", f"{jcloud_url}/api/action/jcloud.api.monitoring.targets",
data={"token": jcloud_token}, data={"token": jcloud_token},
).json()["message"] ).json()["message"]
def generate_prometheus_sites_config(self, benches): def generate_prometheus_sites_config(self, benches):
prometheus_sites_config = os.path.join(self.prometheus_directory, "file_sd", "sites.yml") prometheus_sites_config = os.path.join(self.prometheus_directory, "file_sd", "sites.yml")
temp_sites_config = tempfile.mkstemp(prefix="agent-prometheus-sites-", suffix=".yml")[1] temp_sites_config = tempfile.mkstemp(prefix="agent-prometheus-sites-", suffix=".yml")[1]
self._render_template( self._render_template(
"prometheus/sites.yml", "prometheus/sites.yml",
{"benches": benches}, {"benches": benches},
temp_sites_config, temp_sites_config,
{"block_start_string": "##", "block_end_string": "##"}, {"block_start_string": "##", "block_end_string": "##"},
) )
os.rename(temp_sites_config, prometheus_sites_config) os.rename(temp_sites_config, prometheus_sites_config)
def generate_prometheus_tls_config(self, servers): def generate_prometheus_tls_config(self, servers):
prometheus_tls_config = os.path.join(self.prometheus_directory, "file_sd", "tls.yml") prometheus_tls_config = os.path.join(self.prometheus_directory, "file_sd", "tls.yml")
temp_tls_config = tempfile.mkstemp(prefix="agent-prometheus-tls-", suffix=".yml")[1] temp_tls_config = tempfile.mkstemp(prefix="agent-prometheus-tls-", suffix=".yml")[1]
self._render_template( self._render_template(
"prometheus/tls.yml", "prometheus/tls.yml",
{"servers": servers}, {"servers": servers},
temp_tls_config, temp_tls_config,
{"block_start_string": "##", "block_end_string": "##"}, {"block_start_string": "##", "block_end_string": "##"},
) )
os.rename(temp_tls_config, prometheus_tls_config) os.rename(temp_tls_config, prometheus_tls_config)
def generate_prometheus_domains_config(self, domains): def generate_prometheus_domains_config(self, domains):
prometheus_domains_config = os.path.join(self.prometheus_directory, "file_sd", "domains.yml") prometheus_domains_config = os.path.join(self.prometheus_directory, "file_sd", "domains.yml")
temp_domains_config = tempfile.mkstemp(prefix="agent-prometheus-domains-", suffix=".yml")[1] temp_domains_config = tempfile.mkstemp(prefix="agent-prometheus-domains-", suffix=".yml")[1]
self._render_template( self._render_template(
"prometheus/domains.yml", "prometheus/domains.yml",
{"domains": domains}, {"domains": domains},
temp_domains_config, temp_domains_config,
{"block_start_string": "##", "block_end_string": "##"}, {"block_start_string": "##", "block_end_string": "##"},
) )
os.rename(temp_domains_config, prometheus_domains_config) os.rename(temp_domains_config, prometheus_domains_config)
def generate_prometheus_cluster_config(self, cluster): def generate_prometheus_cluster_config(self, cluster):
prometheus_cluster_config = os.path.join( prometheus_cluster_config = os.path.join(
self.prometheus_directory, self.prometheus_directory,
"file_sd", "file_sd",
f"cluster.{cluster['name']}.yml", f"cluster.{cluster['name']}.yml",
) )
temp_cluster_config = tempfile.mkstemp(prefix="agent-prometheus-cluster-", suffix=".yml")[1] temp_cluster_config = tempfile.mkstemp(prefix="agent-prometheus-cluster-", suffix=".yml")[1]
self._render_template( self._render_template(
"prometheus/servers.yml", "prometheus/servers.yml",
{"cluster": cluster}, {"cluster": cluster},
temp_cluster_config, temp_cluster_config,
{"block_start_string": "##", "block_end_string": "##"}, {"block_start_string": "##", "block_end_string": "##"},
) )
os.rename(temp_cluster_config, prometheus_cluster_config) os.rename(temp_cluster_config, prometheus_cluster_config)

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
- targets: - targets:
##- for domain in domains ## ##- for domain in domains ##
- targets: - targets:
- https://{{ domain.name }}/api/method/ping - https://{{ domain.name }}/api/action/ping
labels: labels:
site: "{{ domain.site }}" site: "{{ domain.site }}"
##- endfor ## ##- endfor ##

View File

@ -1,13 +1,13 @@
- targets: - targets:
## for bench in benches ## ## for bench in benches ##
- targets: - targets:
##- for site in bench.sites ## ##- for site in bench.sites ##
- https://{{ site }}/api/method/ping - https://{{ site }}/api/action/ping
##- endfor ## ##- endfor ##
labels: labels:
cluster: "{{ bench.cluster }}" cluster: "{{ bench.cluster }}"
server: "{{ bench.server }}" server: "{{ bench.server }}"
group: "{{ bench.group }}" group: "{{ bench.group }}"
bench: "{{ bench.name }}" bench: "{{ bench.name }}"
## endfor ## ## endfor ##