Compare commits

..

3 Commits

Author SHA1 Message Date
Lucas Bergman
79bf02e1ff maint: Some Nix flake cleanups
Specifically:

  1. Switch from the nixosModule flake output (which is deprecated) to
     nixosModules.default
  2. Remove "with lib;" it's convenient, but I've gotten feedback when
     upstreaming module changes that that shouldn't be a thing in
     nixpkgs anymore
  3. Add a little type checking to the NixOS module options
  4. Switch the default config to empty (but leave the example)
  5. Use the convention "let cfg = config.services.heracles," a thing
     that's super common in NixOS
2024-02-19 18:06:35 -06:00
Lucas Bergman
e48d63e523 maint: Set formatter Nix flake output so nix fmt works
I've idly thought about making the formatter a derivation that runs alejandra
over Nix code, then rustfmt over Rust code, etc--so that just running `nix
fmt` in the root cleans up everything--but I haven't made that work yet.
2024-02-19 18:05:35 -06:00
Lucas Bergman
e2c57665d9 maint: Run nix stuff through the formatter
There are several choices for formatting Nix code, but IMHO alejandra is the
right kind of opinionated: <https://github.com/kamadorueda/alejandra>.
2024-02-19 17:47:25 -06:00
4 changed files with 38 additions and 31 deletions

View File

@ -8,8 +8,10 @@
- source: http://heimdall:9001 # Prometheus source uri for this plot - source: http://heimdall:9001 # Prometheus source uri for this plot
query: 'sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m]))' # The PromQL query for this plot query: 'sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m]))' # The PromQL query for this plot
meta: # metadata for this plot meta: # metadata for this plot
name_format: "`${labels.instance}`" # javascript template literal to format the trace name name_label: instance # Grab a trace name from the query tags
#d3_tick_format: "~%" # d3 tick format override for this plot's yaxis #d3_tick_format: "~%" # d3 tick format override for this plot's yaxis
#name_prefix: "Prefix" # A prefix for this sublots trace names
#name_suffix: "Suffix" # A suffix for this subplots trace names
#named_axis: "y" # yaxis name to use for this subplots traces #named_axis: "y" # yaxis name to use for this subplots traces
span: # The span for this range query span: # The span for this range query
end: now # Where the span ends. RFC3339 format with special handling for the now keyword end: now # Where the span ends. RFC3339 format with special handling for the now keyword
@ -30,14 +32,16 @@
sum by (instance)(irate(node_cpu_seconds_total{mode="system",job="nodestats"}[5m])) / sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m])) sum by (instance)(irate(node_cpu_seconds_total{mode="system",job="nodestats"}[5m])) / sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m]))
meta: meta:
d3_tick_format: "~%" d3_tick_format: "~%"
name_format: "`${labels.instance} system`" name_label: instance
name_prefix: "System"
named_axis: "y" named_axis: "y"
- source: http://heimdall:9001 - source: http://heimdall:9001
query: | query: |
sum by (instance)(irate(node_cpu_seconds_total{mode="user",job="nodestats"}[5m])) / sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m])) sum by (instance)(irate(node_cpu_seconds_total{mode="user",job="nodestats"}[5m])) / sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m]))
meta: meta:
d3_tick_format: "~%" d3_tick_format: "~%"
name_format: "`${labels.instance} user`" name_label: instance
name_suffix: "User"
named_axis: "y" named_axis: "y"
- title: Node memory - title: Node memory
query_type: Scalar query_type: Scalar
@ -45,4 +49,4 @@
- source: http://heimdall:9001 - source: http://heimdall:9001
query: 'node_memory_MemFree_bytes{job="nodestats"}' query: 'node_memory_MemFree_bytes{job="nodestats"}'
meta: meta:
name_format: "`${labels.instance}`" name_label: instance

View File

@ -83,7 +83,9 @@
sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m])) sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m]))
\'\'; \'\';
meta = { meta = {
name_function = "''${labels.instance}"; name_label = "instance";
name_prefix = "trace name prefix";
name_suffix = "trace name suffix";
named_axis = "y"; named_axis = "y";
# yaxis formatting for this subplot # yaxis formatting for this subplot
d3_tick_format = "~s"; d3_tick_format = "~s";
@ -112,9 +114,11 @@
config = let config = let
cfg = config.services.heracles; cfg = config.services.heracles;
cfgFile = pkgs.writeText "heracles.yaml" (builtins.toJSON cfg.settings);
in in
lib.mkIf cfg.enable { lib.mkIf cfg.enable {
environment.etc."heracles.yaml" = {
text = lib.generators.toYAML {} cfg.settings;
};
systemd.services.heracles = { systemd.services.heracles = {
wantedBy = ["multi-user.target" "default.target"]; wantedBy = ["multi-user.target" "default.target"];
wants = ["network.target"]; wants = ["network.target"];
@ -122,7 +126,7 @@
serviceConfig = { serviceConfig = {
Restart = "on-failure"; Restart = "on-failure";
RestartSec = "30s"; RestartSec = "30s";
ExecStart = "${pkgs.heracles}/bin/heracles --listen ${cfg.listen} --config=${cfgFile}"; ExecStart = "${pkgs.heracles}/bin/heracles --listen ${cfg.listen} --config=${config.environment.etc."heracles.yaml".target}";
}; };
}; };
}; };

View File

@ -117,7 +117,9 @@ pub struct DataPoint {
#[derive(Serialize, Deserialize, Debug, Clone)] #[derive(Serialize, Deserialize, Debug, Clone)]
pub struct PlotMeta { pub struct PlotMeta {
name_format: Option<String>, name_prefix: Option<String>,
name_suffix: Option<String>,
name_label: Option<String>,
named_axis: Option<String>, named_axis: Option<String>,
d3_tick_format: Option<String>, d3_tick_format: Option<String>,
} }

View File

@ -160,17 +160,19 @@ class TimeseriesGraph extends HTMLElement {
yaxis: yaxis, yaxis: yaxis,
yhoverformat: meta["d3_tick_format"], yhoverformat: meta["d3_tick_format"],
}; };
const namePrefix = meta["name_prefix"];
const nameSuffix = meta["name_suffix"];
const nameLabel = meta["name_label"];
var name = ""; var name = "";
const formatter = meta.name_format if (namePrefix) {
if (formatter) { name = namePrefix + "-";
name = eval(formatter); };
} else { if (nameLabel && labels[nameLabel]) {
var names = []; name = name + labels[nameLabel];
for (const value of labels) { };
names.push(value); if (nameSuffix) {
} name = name + " - " + nameSuffix;
name = names.join(" "); };
}
if (name) { trace.name = name; } if (name) { trace.name = name; }
for (const point of series) { for (const point of series) {
trace.x.push(new Date(point.timestamp * 1000)); trace.x.push(new Date(point.timestamp * 1000));
@ -188,22 +190,17 @@ class TimeseriesGraph extends HTMLElement {
type: "bar", type: "bar",
x: [], x: [],
y: [], y: [],
yaxis: yaxis,
yhoverformat: meta["d3_tick_format"], yhoverformat: meta["d3_tick_format"],
}; };
const formatter = meta.name_format; let nameLabel = meta["name_label"];
var name = ""; if (nameLabel && labels[nameLabel]) {
if (formatter) { trace.name = labels[nameLabel];
name = eval(formatter); };
} else { if (nameLabel && labels[nameLabel]) {
var names = []; trace.x.push(labels[nameLabel]);
for (const value of labels) { };
names.push(value);
}
name = names.join(" ");
}
if (name) { trace.name = name; }
trace.y.push(series.value); trace.y.push(series.value);
trace.x.push(trace.name);
traces.push(trace); traces.push(trace);
} }
} }