Enable strictDeps on all our toplevel packages #12
| @ -3,6 +3,7 @@ | ||||
| { | ||||
|   imports = [ | ||||
|     ../module/slurm-exporter.nix | ||||
|     ../module/meteocat-exporter.nix | ||||
|     ./gpfs-probe.nix | ||||
|     ./nix-daemon-exporter.nix | ||||
|   ]; | ||||
| @ -110,6 +111,7 @@ | ||||
|             "127.0.0.1:9341" # Slurm exporter | ||||
|             "127.0.0.1:9966" # GPFS 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}" | ||||
|           ]; | ||||
|         }]; | ||||
|  | ||||
							
								
								
									
										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 { }; | ||||
|   meteocat-exporter = prev.callPackage ./meteocat-exporter/default.nix { }; | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user