mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-13 13:40:28 +03:00
nixos/sitespeed-io: init
This commit is contained in:
parent
cf615b059a
commit
147668b8cf
3 changed files with 125 additions and 0 deletions
|
@ -14,6 +14,8 @@
|
|||
|
||||
- [river](https://github.com/riverwm/river), A dynamic tiling wayland compositor. Available as [programs.river](#opt-programs.river.enable).
|
||||
|
||||
- [sitespeed-io](https://sitespeed.io), a tool that can generate metrics (timings, diagnostics) for websites. Available as [services.sitespeed-io](#opt-services.sitespeed-io.enable).
|
||||
|
||||
## Backward Incompatibilities {#sec-release-23.11-incompatibilities}
|
||||
|
||||
- The latest version of `clonehero` now stores custom content in `~/.clonehero`. See the [migration instructions](https://clonehero.net/2022/11/29/v23-to-v1-migration-instructions.html). Typically, these content files would exist along side the binary, but the previous build used a wrapper script that would store them in `~/.config/unity3d/srylain Inc_/Clone Hero`.
|
||||
|
|
|
@ -1010,6 +1010,7 @@
|
|||
./services/networking/shorewall.nix
|
||||
./services/networking/shorewall6.nix
|
||||
./services/networking/shout.nix
|
||||
./services/networking/sitespeed-io.nix
|
||||
./services/networking/skydns.nix
|
||||
./services/networking/smartdns.nix
|
||||
./services/networking/smokeping.nix
|
||||
|
|
122
nixos/modules/services/networking/sitespeed-io.nix
Normal file
122
nixos/modules/services/networking/sitespeed-io.nix
Normal file
|
@ -0,0 +1,122 @@
|
|||
{ lib, config, pkgs, ... }:
|
||||
let
|
||||
cfg = config.services.sitespeed-io;
|
||||
format = pkgs.formats.json { };
|
||||
in
|
||||
{
|
||||
options.services.sitespeed-io = {
|
||||
enable = lib.mkEnableOption (lib.mdDoc "Sitespeed.io");
|
||||
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "sitespeed-io";
|
||||
description = lib.mdDoc "User account under which sitespeed-io runs.";
|
||||
};
|
||||
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = pkgs.sitespeed-io;
|
||||
defaultText = "pkgs.sitespeed-io";
|
||||
description = lib.mdDoc "Sitespeed.io package to use.";
|
||||
};
|
||||
|
||||
dataDir = lib.mkOption {
|
||||
default = "/var/lib/sitespeed-io";
|
||||
type = lib.types.str;
|
||||
description = lib.mdDoc "The base sitespeed-io data directory.";
|
||||
};
|
||||
|
||||
period = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "hourly";
|
||||
description = lib.mdDoc ''
|
||||
Systemd calendar expression when to run. See {manpage}`systemd.time(7)`.
|
||||
'';
|
||||
};
|
||||
|
||||
runs = lib.mkOption {
|
||||
default = [ ];
|
||||
description = lib.mdDoc ''
|
||||
A list of run configurations. The service will call sitespeed-io once
|
||||
for every run listed here. This lets you examine different websites
|
||||
with different sitespeed-io settings.
|
||||
'';
|
||||
type = lib.types.listOf (lib.types.submodule {
|
||||
options = {
|
||||
urls = lib.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
default = [];
|
||||
description = lib.mdDoc ''
|
||||
URLs the service should monitor.
|
||||
'';
|
||||
};
|
||||
|
||||
settings = lib.mkOption {
|
||||
type = lib.types.submodule {
|
||||
freeformType = format.type;
|
||||
options = { };
|
||||
};
|
||||
default = { };
|
||||
description = lib.mdDoc ''
|
||||
Configuration for sitespeed-io, see
|
||||
<https://www.sitespeed.io/documentation/sitespeed.io/configuration/>
|
||||
for available options. The value here will be directly transformed to
|
||||
JSON and passed as `--config` to the program.
|
||||
'';
|
||||
};
|
||||
|
||||
extraArgs = lib.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
default = [];
|
||||
description = lib.mdDoc ''
|
||||
Extra command line arguments to pass to the program.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.runs != [];
|
||||
message = "At least one run must be configured.";
|
||||
}
|
||||
{
|
||||
assertion = lib.all (run: run.urls != []) cfg.runs;
|
||||
message = "All runs must have at least one url configured.";
|
||||
}
|
||||
];
|
||||
|
||||
systemd.services.sitespeed-io = {
|
||||
description = "Check website status";
|
||||
startAt = cfg.period;
|
||||
serviceConfig = {
|
||||
WorkingDirectory = cfg.dataDir;
|
||||
User = cfg.user;
|
||||
};
|
||||
preStart = "chmod u+w -R ${cfg.dataDir}"; # Make sure things are writable
|
||||
script = (lib.concatMapStrings (run: ''
|
||||
${lib.getExe cfg.package} \
|
||||
--config ${format.generate "sitespeed.json" run.settings} \
|
||||
${lib.escapeShellArgs run.extraArgs} \
|
||||
${builtins.toFile "urls.txt" (lib.concatLines run.urls)} &
|
||||
'') cfg.runs) +
|
||||
''
|
||||
wait
|
||||
'';
|
||||
};
|
||||
|
||||
users = {
|
||||
extraUsers.${cfg.user} = {
|
||||
isSystemUser = true;
|
||||
group = cfg.user;
|
||||
home = cfg.dataDir;
|
||||
createHome = true;
|
||||
homeMode = "755";
|
||||
};
|
||||
extraGroups.${cfg.user} = { };
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue