/
default.nix
125 lines (96 loc) · 2.74 KB
/
default.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
{ pkgs
, lib, jq, runCommand
, db-analyser
, cardanoNodePackages
}:
with lib;
let
workbench' = tools:
pkgs.stdenv.mkDerivation {
pname = "workbench";
version = "0.1";
src = ./.;
buildInputs = with pkgs; [ jq makeWrapper ];
buildPhase = ''
patchShebangs .
'';
postFixup = ''
wrapProgram "$out/bin/wb" --argv0 wb --prefix PATH ":" ${makeBinPath tools}
'';
installPhase = ''
mkdir -p $out/bin
cp -a wb chain-filters profiles *.sh *.jq $out/bin
'';
dontStrip = true;
};
workbench = with cardanoNodePackages; with pkgs; workbench' (
[ git graphviz
jq yq
moreutils
procps
cardano-cli
cardano-topology
] ++ lib.optional (!pkgs.stdenv.hostPlatform.isDarwin) db-analyser ++ [
locli
]);
runWorkbench =
name: command:
runCommand name {} ''
${workbench}/bin/wb ${command} > $out
'';
runWorkbenchJqOnly =
name: command:
runCommand name {} ''
${workbench' (with pkgs; [jq moreutils])}/bin/wb ${command} > $out
'';
runJq =
name: args: query:
runCommand name {} ''
args=(${args})
${jq}/bin/jq '${query}' "''${args[@]}" > $out
'';
profile-names-json =
runWorkbenchJqOnly "profile-names.json" "profiles list";
profile-names =
__fromJSON (__readFile profile-names-json);
all-profiles =
## The backend is an attrset of AWS/supervisord-specific methods and parameters.
{ backend }:
rec {
mkProfile =
profileName:
pkgs.callPackage ./profiles
{ inherit
pkgs
runWorkbenchJqOnly runJq workbench
profileName;
inherit (backend) services-config;
};
value = genAttrs profile-names mkProfile;
JSON = pkgs.writeText "all-profiles.json" (__toJSON (mapAttrs (_: x: x.value) value));
};
with-profile =
{ backend, profileName }:
let
ps = all-profiles { inherit backend; };
profileNix = ps.value."${profileName}"
or (throw "No such profile: ${profileName}; Known profiles: ${toString (__attrNames ps.value)}");
profile = (import ./profile.nix { inherit pkgs lib; })
{ inherit profileNix backend; };
topology = (import ./topology.nix { inherit pkgs; })
{ inherit profileNix profile; };
genesis = (import ./genesis.nix { inherit pkgs; })
{ inherit profile; };
in {
inherit
profileNix profile
topology
genesis;
};
run-analysis = import ./analyse.nix;
in {
inherit runJq;
inherit workbench' workbench runWorkbench runWorkbenchJqOnly;
inherit all-profiles profile-names profile-names-json with-profile;
inherit run-analysis;
}