Enable strictDeps on all our toplevel packages #12
@ -3,6 +3,7 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
../module/slurm-exporter.nix
|
../module/slurm-exporter.nix
|
||||||
|
../module/meteocat-exporter.nix
|
||||||
./gpfs-probe.nix
|
./gpfs-probe.nix
|
||||||
./nix-daemon-exporter.nix
|
./nix-daemon-exporter.nix
|
||||||
];
|
];
|
||||||
@ -110,6 +111,7 @@
|
|||||||
"127.0.0.1:9341" # Slurm exporter
|
"127.0.0.1:9341" # Slurm exporter
|
||||||
"127.0.0.1:9966" # GPFS custom exporter
|
"127.0.0.1:9966" # GPFS custom exporter
|
||||||
"127.0.0.1:9999" # Nix-daemon custom exporter
|
"127.0.0.1:9999" # Nix-daemon custom exporter
|
||||||
|
"127.0.0.1:9929" # Meteocat custom exporter
|
||||||
"127.0.0.1:${toString config.services.prometheus.exporters.blackbox.port}"
|
"127.0.0.1:${toString config.services.prometheus.exporters.blackbox.port}"
|
||||||
];
|
];
|
||||||
}];
|
}];
|
||||||
|
|||||||
17
m/module/meteocat-exporter.nix
Normal file
17
m/module/meteocat-exporter.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
systemd.services."prometheus-meteocat-exporter" = {
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
Restart = mkDefault "always";
|
||||||
|
PrivateTmp = mkDefault true;
|
||||||
|
WorkingDirectory = mkDefault "/tmp";
|
||||||
|
DynamicUser = mkDefault true;
|
||||||
|
ExecStart = "${pkgs.meteocat-exporter}/bin/meteocat-exporter";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
25
pkgs/meteocat-exporter/default.nix
Normal file
25
pkgs/meteocat-exporter/default.nix
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{ python3Packages, lib }:
|
||||||
|
|
||||||
|
python3Packages.buildPythonApplication rec {
|
||||||
|
pname = "meteocat-exporter";
|
||||||
|
version = "1.0";
|
||||||
|
|
||||||
|
src = ./.;
|
||||||
|
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
|
build-system = with python3Packages; [
|
||||||
|
setuptools
|
||||||
|
];
|
||||||
|
|
||||||
|
dependencies = with python3Packages; [
|
||||||
|
beautifulsoup4
|
||||||
|
lxml
|
||||||
|
prometheus-client
|
||||||
|
];
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "MeteoCat Prometheus Exporter";
|
||||||
|
platforms = platforms.linux;
|
||||||
|
};
|
||||||
|
}
|
||||||
54
pkgs/meteocat-exporter/meteocat-exporter
Normal file
54
pkgs/meteocat-exporter/meteocat-exporter
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import time
|
||||||
|
from prometheus_client import start_http_server, Gauge
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
from urllib import request
|
||||||
|
|
||||||
|
# Configuration -------------------------------------------
|
||||||
|
meteo_station = "X8" # Barcelona - Zona Universitària
|
||||||
|
listening_port = 9929
|
||||||
|
update_period = 60 * 5 # Each 5 min
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
|
metric_tmin = Gauge('meteocat_temp_min', 'Min temperature')
|
||||||
|
metric_tmax = Gauge('meteocat_temp_max', 'Max temperature')
|
||||||
|
metric_tavg = Gauge('meteocat_temp_avg', 'Average temperature')
|
||||||
|
metric_srad = Gauge('meteocat_solar_radiation', 'Solar radiation')
|
||||||
|
|
||||||
|
def update(st):
|
||||||
|
url = 'https://www.meteo.cat/observacions/xema/dades?codi=' + st
|
||||||
|
response = request.urlopen(url)
|
||||||
|
data = response.read()
|
||||||
|
soup = BeautifulSoup(data, 'lxml')
|
||||||
|
table = soup.find("table", {"class" : "tblperiode"})
|
||||||
|
rows = table.find_all('tr')
|
||||||
|
row = rows[-1] # Take the last row
|
||||||
|
row_data = []
|
||||||
|
header = row.find('th')
|
||||||
|
header_text = header.text.strip()
|
||||||
|
row_data.append(header_text)
|
||||||
|
for col in row.find_all('td'):
|
||||||
|
row_data.append(col.text)
|
||||||
|
try:
|
||||||
|
# Sometimes it will return '(s/d)' and fail to parse
|
||||||
|
metric_tavg.set(float(row_data[1]))
|
||||||
|
metric_tmax.set(float(row_data[2]))
|
||||||
|
metric_tmin.set(float(row_data[3]))
|
||||||
|
metric_srad.set(float(row_data[10]))
|
||||||
|
#print("ok: temp_avg={}".format(float(row_data[1])))
|
||||||
|
except:
|
||||||
|
print("cannot parse row: {}".format(row))
|
||||||
|
metric_tavg.set(float("nan"))
|
||||||
|
metric_tmax.set(float("nan"))
|
||||||
|
metric_tmin.set(float("nan"))
|
||||||
|
metric_srad.set(float("nan"))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
start_http_server(port=listening_port, addr="localhost")
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
update(meteo_station)
|
||||||
|
except:
|
||||||
|
print("update failed")
|
||||||
|
time.sleep(update_period)
|
||||||
11
pkgs/meteocat-exporter/setup.py
Normal file
11
pkgs/meteocat-exporter/setup.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
setup(name='meteocat-exporter',
|
||||||
|
version='1.0',
|
||||||
|
# Modules to import from other scripts:
|
||||||
|
packages=find_packages(),
|
||||||
|
# Executables
|
||||||
|
scripts=["meteocat-exporter"],
|
||||||
|
)
|
||||||
@ -54,4 +54,5 @@ final: prev:
|
|||||||
});
|
});
|
||||||
|
|
||||||
prometheus-slurm-exporter = prev.callPackage ./slurm-exporter.nix { };
|
prometheus-slurm-exporter = prev.callPackage ./slurm-exporter.nix { };
|
||||||
|
meteocat-exporter = prev.callPackage ./meteocat-exporter/default.nix { };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user