services.hpcstat: init

This commit is contained in:
陈浩南 2024-05-04 15:18:03 +08:00
parent ff84538460
commit 42f84e2f6d
11 changed files with 137 additions and 15 deletions

View File

@ -72,6 +72,7 @@ inputs:
publicKey = "xCYRbZEaGloMk7Awr00UR3JcDJy4AzVp4QvGNoyEgFY=";
wireguardIp = "192.168.83.4";
};
hpcstat = {};
};
user.users = [ "chn" "xll" "zem" "yjq" "gb" ];
};

View File

@ -13,6 +13,11 @@ nginx:
maxmind-license: ENC[AES256_GCM,data:JbAnFQiDcJGwvb89sG2ro77nwwOWcDnqVcA902jwb2zzZci7PpXROw==,iv:eifkWK0oN73Ekn3oWzy6XbYK2GU+4tlnLPJ+96WOWJY=,tag:35ulsshxtUfOsSQOLgAt0g==,type:str]
wireguard:
privateKey: ENC[AES256_GCM,data:VPlB4wSbWqSYw3rYRwfAMa39xrPcPZfz7sV2Cq3rmOhifnUPwggxnA+51do=,iv:utnyrB6Yfe5O94Oq4HDVFm/lQ9ZBoyvUT68r2G2PdwA=,tag:snm01vA+z2yKK8d2i5i2ig==,type:str]
telegram:
token: ENC[AES256_GCM,data:NK9Eq3jUaMVNyPyqiXEkrc4m81c2CBg3p9TjpD8TQgKRYs2uxT9lsSrLMi02Rw==,iv:N2mjY9n7QuLD2PG4gNl79c933GTCCfw35XxluiLSuOA=,tag:ZLreEQoV+O0yhHw0CM00aQ==,type:str]
chat: ENC[AES256_GCM,data:XJi6HftAygFH,iv:ea2m41/YXp0VyxR9U84xMCHdknZBhP2QUiX6zsipaFc=,tag:+/Y2bvUwrQsLVGUZp0Imwg==,type:str]
hpcstat:
key: ENC[AES256_GCM,data:3bMieouWGMEw8eu6z55TX66NAGiF/O5dRtnDTjDtNC3fmR4PTn+FreMZuA9+AjTPUm2GsS9esC6tULIzh+qTflnSrxqtTdKAbfqY6o8pPPpDJ9WWm4f/g3x8PnvlsyQDYCZ0MYKYg3cc6n60moCzv1WWlVsT8QUMTXQL3yb36vVzo4ELea4Gf2UkpfYKX89gFDtJK78srh7rj8rwoDiBs1qVUUnIBABUDLxoyC3Rym5yevrCJeFD+8AlIAIaMc62Kslw0lCCKKSaXGsFpppFYFwUTedi595eISEr4tIuPXVd4EECQchsYg+tInphIXebp/5rzXQM37yQEymImNRiMcxDWGR0B8Nq9XO+I5T8VOIb6xXCtvEeY2Z8nPfmUn9UHfvYzqFv3it5TCcd9J4SeBa2LVW8+YCIO/KitznL49O5SGAJUONIkcwMUhUuXQUFe/vnc+g8+yqB5ltCZtHWCOY2pCdmQpBRaZq55fcde5FNhxt3J8zCbu++oIn+ERSHadMIGMuGgGqzG6XDQJZN,iv:cbPCnNi2gX1gZIdcQd7HR3c/JEsWj3nv+x+OQ0bDs40=,tag:olrGr6t2Si39wl/1rR81ig==,type:str]
sops:
kms: []
gcp_kms: []
@ -37,8 +42,8 @@ sops:
by9Rd0U0bzNiK21BQTNxN1RuQ09DQVkKJmSlzV5ppEkZFljsS17ZWmoI++fz4tJh
kTdoAStG1zsKASHyZTsmdm3RBDO3qV1KhQC2gC7d4EiwNZngxOOZJg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-04-18T13:51:13Z"
mac: ENC[AES256_GCM,data:mRJEowQNw1aczxkxcBt9Y0LCfv7Q10Of5Bo7nuTYES5/DVRHK8ZRILm9w2/5+jpcRdpFnkvfOZ6yMu0YPipEfa/LeLJIDMHPbp2qgafZ1XSaanT9EC+vr6Lc5tqKoPnDD00+HtX9LqpDOhWvBkuS874O2Hg9HUZd/PrfCj3oFes=,iv:wqbIVCXWtslBfkzyJ5ZLFlyT1GUuu76yk9zlw05is8E=,tag:bkyyWqIrLlfOPlhxsS+a8g==,type:str]
lastmodified: "2024-05-04T07:16:07Z"
mac: ENC[AES256_GCM,data:5ZdD8A4oFj/ncIg3osFkfXn2i/e5wAhdtlGTZYfdjOLzClo3LgRx3dUachWL/RVs48E4301/XSYliX4YjAmjPtcD44J7uEr61iI6b4SiQIAzrAaTLqAdVLU6L7TTbJJOhsp+FMsGgfaONu89nSts+NYAgo1Khx9eFMII+BCU65E=,iv:LnautDjO5WwcXO6GsgulDsoKkG3cty7hRfT9f0+9YSk=,tag:HJ1LS4RUMhW7uigiAWACZg==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1

View File

@ -34,9 +34,6 @@ xray-server:
user13: ENC[AES256_GCM,data:ExbnvWDIBqga5+k2mpoT8AKBOXAvUNMjBTPXUKrmtWzz4l+L,iv:UI7CvSx2FHYGf6BEHS4e3iwHZZWkl2Zt5xg2WdKbLvY=,tag:ad0c7YW2Bxo+Dn+BoSZ0Ng==,type:str]
#ENC[AES256_GCM,data:R8lN5T0=,iv:FXLf8Vtjg+PkwNhxXWDViMKqwn7tFMaPhio9zhnudZw=,tag:34gxRH+P9lmkUxlOPKcYMg==,type:comment]
user14: ENC[AES256_GCM,data:dgNPPlJD5JOFPbKhlvlRHBLmUNKeDm/JAiawUVpBE7H07Box,iv:w+t9BkqYvlxVKr+x0MwtBz0/YSR/7z1OnZLIoPdW4gc=,tag:CR3GLbaO0jSQgA2HuwzRqg==,type:str]
telegram:
token: ENC[AES256_GCM,data:xsJoGgQ8pLeZqA2alGKkCyrvnjY6rVF5TlXn4GWDrStFBl65XXzwVY/9ZZthYQ==,iv:qTLfpRUyuIGFM668URfknhSRtx3WEHp/WTGzGUPuFd4=,tag:p8mF0tM+t02g7v2EQZN3Vg==,type:str]
chat: ENC[AES256_GCM,data:X1JxFQw0bPCu,iv:hf+TOSH2p9RdnXDFKxTpSRzxDLdJyzNHVV8MfOQuGWY=,tag:iiWw9IFiBGOOyOSl9Jj2wQ==,type:str]
private-key: ENC[AES256_GCM,data:ts/LRGFAsYqvGvkvlxUI42IW1a8cGsSkpZhMDd3QVceRKvhPb1SRDaXoSw==,iv:6xX9xFIFUNlLBZ6CPBOz9JbHpvC4+QG9ZaCZcWdl12c=,tag:DYIa+QTV8vyl1l7OKKykTw==,type:str]
nginx:
#ENC[AES256_GCM,data:85LrqdTMIhSa,iv:mIQPYz8VPd5AxeMCQEdTGMD0Iqa5QEAa5+8JVFaj3JM=,tag:TcZd7S3WRPpEV9lHI1fzbw==,type:comment]
@ -53,6 +50,9 @@ coturn:
auth-secret: ENC[AES256_GCM,data:50KqO4GQ1ERbCnK4IjYu6aywT+IPMtVlTzh/TE4MwWApU4pO9yqz25ENGUAKRLi4p+Ecug+Rn3InRl1b+q6bAQ==,iv:SgHkHvHg/+yA1Z5E9effgCnZMVXv5amGNUsVKErai54=,tag:PoYLV9Xr0IXXsA39n7wiTQ==,type:str]
wireguard:
privateKey: ENC[AES256_GCM,data:4DKPPqQkjb33rQzFIz863A2arDRQA9AivWFBaWTf0xXDX4hWvJFiIlJQfvE=,iv:0R2TH3CMxHgwVjojzjE2Gnp8SXonmBDLWF7hB33NiX0=,tag:vgtV8JkuCdspleN/SvgIqQ==,type:str]
telegram:
token: ENC[AES256_GCM,data:LskBPmXZk3hRZ2bChXZjmRzzGd2A2GKrUZMknCDXTpTzOdP/RDibRvgI75HLWg==,iv:9lJKuGLD5HuQinWvvAvwWFAvEJofUGkJsxKNpqZrGmI=,tag:pTmTOlsYIY6Uqd69AtrnBA==,type:str]
chat: ENC[AES256_GCM,data:0ehCIvd7sBFc,iv:OwdiIoPrt/e1YgsCrYcqqMYhsJuEtKW2pSKNVxahMV4=,tag:ig2CfQxwzv2ppIutU6371w==,type:str]
sops:
kms: []
gcp_kms: []
@ -77,8 +77,8 @@ sops:
ZXFTU3ZCaW1pTVh0RUJzdDdGdHlPYTgK2mlgcX2kEc8+2UDdBnhUm6IIuh8V6agW
ooxH9OEPXUVI/4JcDo4v8ZUhAyU1ehLH0Ef7PJCChOZe2KZmWSNbhA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-03-28T10:31:05Z"
mac: ENC[AES256_GCM,data:6Z+ltjbvQaYhDPoiCN7ajQeWcp6vj3TIcUXUm/r/tZU4mIOvfxA7hxW971b76bYPTeVwgp7ZB9qQy9emDHV9i+aSyJpTPKQHRRz5J+T+NJhTP/IL3R3VmG89ssC6NH8FSk0S487JkPd8tNz+G6bvwFCPRxRLNj1pXX0Dp6tgwIw=,iv:xLw2iX1ODAbJCTJ8fEvG7SdZ1GnGwADIckH8DibVM2Y=,tag:TTzlHdcyIQr/92ZHmViRXQ==,type:str]
lastmodified: "2024-05-04T07:09:15Z"
mac: ENC[AES256_GCM,data:s4v0QO3B2q+BjPZ4BmsElRJSEfLgOgWtzv2T8Q6iduV2MPB6ms/+hjJYPPAgdaDtkdgzSy3IAhxI9JB3jV13OX7Uq9tPb/JT/bV+5lXvXK1v8iWA9OZoxx6lz33fRPafNZYtzjilHH9frs+zg1FiJL12LNR26A05QxjrnbSEgwE=,iv:hLqBW5c4cO59OB4M5MefE7AvfcddsFqF6oghTReFTgQ=,tag:wGDan9hC4n9IXAxDvo267A==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1

View File

@ -91,8 +91,6 @@ fz-new-order:
username: ENC[AES256_GCM,data:xWP1cesh,iv:11KFZ/J9PScz/oW2+H5BWgw0+ETkCXlcYOMuPpgjEs0=,tag:HswEVzm6ElRjIDsZyEfZcA==,type:str]
password: ENC[AES256_GCM,data:Da/E7ZeZ,iv:gIoheXeTErV3+CtZSEDsX7pGzRahHWlKYQ6QZ6W2eu8=,tag:0oQzQ5DJiS2hqMQfU6JRWw==,type:str]
comment: ENC[AES256_GCM,data:etfZKwbh,iv:XqqF3D0PpCPd2Q/CCu/PAH4SrvXAOu+lIXvSht/KfKk=,tag:7jyG33foxneRK2wvI/5uBg==,type:str]
httpapi:
token: ENC[AES256_GCM,data:fuGJ+5sKr3yob7JbyqtwGBAxnDzxTvoC5XPWHNawOjqC7Ydz6HujpYudG2CUMxt+rA==,iv:Yhg5NqRRp+PYsxNKFUiUydAL1hmz2pr/T0f5GDKV18w=,tag:SZoy0gTzpeq39mEFBTUDLA==,type:str]
gitlab:
secret: ENC[AES256_GCM,data:hBax7ClSuttBacykKw42pvrvowZW8OeTry/0rkmy5BHyLM7HllNYCOw+tupIOdhVEfgJPWQeBeGuyFHt7lPRWQ==,iv:zOM+eMW04Z9QkTchkAXWYHg2eWTQmGEs/dHtUnvNVd8=,tag:RzLyecuASl9CcmQSuabN6w==,type:str]
otp: ENC[AES256_GCM,data:Hgq5Tyq+BUTsexVsjFWf07fY0znPL50+qIm+fhuVljlauXBZouQjJKMhqTs9zhLECOktYUtp0wrNa++nO1Ys9A==,iv:Am51j8QjDtldtsZL8uCu0I3pr/SQ6R8KUQinznZjClg=,tag:hbtrlG0MGNL3VcbQUG/irQ==,type:str]
@ -107,6 +105,9 @@ vikunja:
jwtsecret: ENC[AES256_GCM,data:p6e22qPJzTGB21oWhSr8AA4bfrele9ZOHVtZ8BHgX21IhoKdm58coGtSX1CGXR7J6+1/74RdLY9K88nGrM1F1w==,iv:DGUO8rhf7Lg9dTqSmzlR/Jd2K4oUjO8w9E5bihwsykI=,tag:SpX6UI0QIju/tC1fIL9CCg==,type:str]
chatgpt:
key: ENC[AES256_GCM,data:bkLxKUqkjwpUeqeAZCaAgKiOse8QtZ0zOn9TQNA84+B3rxNiTFPisI8=,iv:Zd5dO5Sdt4HCvNZgS2K0FjJAzti6oE22vahYQl99TrI=,tag:E3o+X84tRsIEGU9Jfb85JQ==,type:str]
telegram:
token: ENC[AES256_GCM,data:Mr6KrAzYoDXA+dPT3oXqK2wm9ahTjZ5GVE/iRPsmcM+S2MABT+8ramyHz9oIFw==,iv:nIZ8rpSxz2GwMbDQFfG3xauMQjiriZ1oxFMrEQeH7sQ=,tag:y5U1T1vV/mmdE/CeaeTR8g==,type:str]
chat: ENC[AES256_GCM,data:8w/0EI64a1dC,iv:dHu9JHcUY7QPd9YBKXnrRXQB2K6jpnLrSFs+1IJmkio=,tag:3ucN3uNnBxxRF+cbLsa1nQ==,type:str]
sops:
kms: []
gcp_kms: []
@ -131,8 +132,8 @@ sops:
SnFHS1Z0SXUzTFdEd29KTy9DU3Y3R0UKfhh+rUmWDrf+UGjclP57dHipPLFoXSqy
HdelmfV6q4/c7ppx2E+oZw3VNgoZCsrxxzYZfwxHJiZb+5vkE0D8iA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-04-18T13:48:22Z"
mac: ENC[AES256_GCM,data:LjUMKJBWlNb/7s2VfFQATmRNPpmP0w7wZ+/7R2rpeH/1rTUH7ee3f3tutHijF1MnFjx1Z22iGC0jW/P9VBedKSETJBhQQ9lHZDqr7dzr+InbnYQ1sCt2LnLBu1m7bACgOxh9xr9v8pGIj9UdW+9gMhpSIB5r8h6/cIuBiO/7eqs=,iv:d0qj6vZSHoeuZNsLCzAJ6Ono4Mqf01SWkygItkP5Vco=,tag:CAQ2O6/86Smc77qrfcU7Xg==,type:str]
lastmodified: "2024-05-04T07:10:12Z"
mac: ENC[AES256_GCM,data:T7FlibdRFYq4fnPUOZuROck6k8x2wJFXROj7cV9xXgpF894nm0gLDCApzx0ZFVWqTIUwvMYOlwELqNidAFeiZyD+05EGpMUP6kBqwU5Dc86n+JingVqxnaYsFJHGUQDWBcTLsOhdCRKwTOjak8j4o83tEPmqBSp1o2Ffnpg85yM=,iv:XzOUmV0oGwANqWVTm8wqx3XDcQnh3XlWydivjkIgets=,tag:2HG1JXozALYEtVpVkwLlAg==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1

View File

@ -1039,6 +1039,22 @@
"type": "github"
}
},
"hpcstat": {
"flake": false,
"locked": {
"lastModified": 1714808857,
"narHash": "sha256-UtAqI6xTRqoHr7b7E9CTZrZ5q2x9R4ybS3xGCXIZH+g=",
"owner": "CHN-beta",
"repo": "hpcstat",
"rev": "07dd607ae6f2c336824aff062d666b7281eb550b",
"type": "github"
},
"original": {
"owner": "CHN-beta",
"repo": "hpcstat",
"type": "github"
}
},
"impermanence": {
"locked": {
"lastModified": 1708968331,
@ -2187,6 +2203,7 @@
"fluent-kde": "fluent-kde",
"gricad": "gricad",
"home-manager": "home-manager",
"hpcstat": "hpcstat",
"impermanence": "impermanence",
"kylin-virtual-keyboard": "kylin-virtual-keyboard",
"lepton": "lepton",
@ -2226,6 +2243,7 @@
"tgbot-cpp": "tgbot-cpp",
"v-sim": "v-sim",
"win11os-kde": "win11os-kde",
"xmuhpc-dotfiles": "xmuhpc-dotfiles",
"zpp-bits": "zpp-bits",
"zxorm": "zxorm"
}
@ -2720,6 +2738,22 @@
"type": "github"
}
},
"xmuhpc-dotfiles": {
"flake": false,
"locked": {
"lastModified": 1714809169,
"narHash": "sha256-sdpb3W/EvMbpyT/COP37CDVJJBKXsPSpW+gnov8Imno=",
"ref": "refs/heads/main",
"rev": "b90c83c9a2849129c6501a9b1023ecaa2bf79c93",
"revCount": 7,
"type": "git",
"url": "https://git.chn.moe/chn/xmuhpc-dotfiles.git"
},
"original": {
"type": "git",
"url": "https://git.chn.moe/chn/xmuhpc-dotfiles.git"
}
},
"yafas": {
"inputs": {
"flake-schemas": [

View File

@ -79,6 +79,8 @@
kylin-virtual-keyboard = { url = "git+https://gitee.com/openkylin/kylin-virtual-keyboard.git"; flake = false; };
cjktty = { url = "github:zhmars/cjktty-patches"; flake = false; };
zxorm = { url = "github:crabmandable/zxorm"; flake = false; };
hpcstat = { url = "github:CHN-beta/hpcstat"; flake = false; };
xmuhpc-dotfiles = { url = "git+https://git.chn.moe/chn/xmuhpc-dotfiles.git"; flake = false; };
};
outputs = inputs:

View File

@ -85,6 +85,7 @@ inputs: rec
{ src = inputs.topInputs.kylin-virtual-keyboard; };
biu = inputs.pkgs.callPackage ./biu { inherit nameof; };
zxorm = inputs.pkgs.callPackage ./zxorm { src = inputs.topInputs.zxorm; };
hpcstat = inputs.pkgs.callPackage "${inputs.topInputs.hpcstat}" { inherit nameof zxorm zpp-bits; };
fromYaml = content: builtins.fromJSON (builtins.readFile
(inputs.pkgs.runCommand "toJSON" {}

View File

@ -0,0 +1,76 @@
inputs:
{
options.nixos.services.hpcstat = let inherit (inputs.lib) mkOption types; in mkOption
{
type = types.nullOr (types.submodule {});
default = null;
};
config = let inherit (inputs.config.nixos.services) hpcstat; in inputs.lib.mkIf (hpcstat != null)
{
systemd =
{
services.hpcstat =
{
script =
let
rsync = "${inputs.pkgs.rsync}/bin/rsync";
grep = "${inputs.pkgs.gnugrep}/bin/grep";
curl = "${inputs.pkgs.curl}/bin/curl";
cat = "${inputs.pkgs.coreutils}/bin/cat";
token = inputs.config.sops.secrets."telegram/token".path;
chat = inputs.config.sops.secrets."telegram/chat".path;
date = "${inputs.pkgs.coreutils}/bin/date";
hpcstat = "${inputs.pkgs.localPackages.hpcstat}/bin/hpcstat";
ssh = "${inputs.pkgs.openssh}/bin/ssh -i ${key} -o StrictHostKeyChecking=no"
+ " -o AllowAgentForwarding=yes -o AddKeysToAgent=yes";
key = inputs.config.sops.secrets."hpcstat/key".path;
in
''
# check if the file content differ
if rsync -e "${ssh}" -acnri jykang/ jykang@hpc.xmu.edu.cn:~/ | grep -E '^[<>]' -q; then
${curl} -X POST -H 'Content-Type: application/json' \
-d "{\"chat_id\": \"$(${cat} ${chat})\", \"text\": \"File content differ!\"}" \
https://api.telegram.org/bot$(${cat} ${token})/sendMessage
exit 1
fi
# check finishjob
${ssh} jykang@@hpc.xmu.edu.cn hpcstat finishjob
# download database
now=$(date '+%Y%m%d%H%M%S')
rsync -e "${ssh}" \
jykang@hpc.xmu.edu.cn:~/linwei/chn/software/hpcstat/hpcstat.db /var/lib/hpcstat/hpcstat.db.$now
if [ $? -ne 0 ]; then
${curl} -X POST -H 'Content-Type: application/json' \
-d "{\"chat_id\": \"$(${cat} ${chat})\", \"text\": \"Download database failed!\"}" \
https://api.telegram.org/bot$(${cat} ${token})/sendMessage
exit 1
fi
# diff database
[ -f /var/lib/hpcstat/hpcstat.db.last ] \
&& ${hpcstat} verify /var/lib/hpcstat/hpcstat.db.last /var/lib/hpcstat/hpcstat.db.$now
if [ $? -ne 0 ]; then
${curl} -X POST -H 'Content-Type: application/json' \
-d "{\"chat_id\": \"$(${cat} ${chat})\", \"text\": \"Database verification failed!\"}" \
https://api.telegram.org/bot$(${cat} ${token})/sendMessage
exit 1
fi
# update database
ln -sf hpcstat.db.$now /var/lib/hpcstat/hpcstat.db.last
'';
serviceConfig = { Type = "oneshot"; User = "hpcstat"; Group = "hpcstat"; };
};
timers.hpcstat =
{
wantedBy = [ "timers.target" ];
timerConfig = { OnCalendar = "minutely"; Unit = "hpcstat.service"; };
};
tmpfiles.rules = [ "d /var/lib/hpcstat 0700 hpcstat hpcstat" ];
};
sops.secrets = { "telegram/token" = {}; "telegram/chat" = {}; "hpcstat/key" = {}; };
users =
{
users.hpcstat = { uid = inputs.config.nixos.user.uid.hpcstat; group = "hpcstat"; isSystemUser = true; };
groups.hpcstat.gid = inputs.config.nixos.user.gid.hpcstat;
};
};
}

View File

@ -35,7 +35,8 @@ inputs:
content =
let
placeholder = inputs.config.sops.placeholder;
request = "https://api.telegram.org/${placeholder."httpapi/token"}/sendMessage?chat_id=861886506&text=";
request = "https://api.telegram.org/${placeholder."telegram/token"}"
+ "/sendMessage?chat_id=${placeholder."telegram/chat"}&text=";
in ''<?php print file_get_contents("${request}".urlencode($_GET["message"])); ?>'';
};
secrets."httpapi/token" = {};

View File

@ -444,7 +444,7 @@ inputs:
// (builtins.listToAttrs (map
(name:
{
name = "xray-server/telegram/${name}";
name = "telegram/${name}";
value = (let user = inputs.config.users.users.v2ray; in { owner = user.name; inherit (user) group; });
})
[ "token" "chat" ]))
@ -478,8 +478,8 @@ inputs:
jq = "${inputs.pkgs.jq}/bin/jq";
sed = "${inputs.pkgs.gnused}/bin/sed";
cat = "${inputs.pkgs.coreutils}/bin/cat";
token = inputs.config.sops.secrets."xray-server/telegram/token".path;
chat = inputs.config.sops.secrets."xray-server/telegram/chat".path;
token = inputs.config.sops.secrets."telegram/token".path;
chat = inputs.config.sops.secrets."telegram/chat".path;
in
''
message='xray:\n'

View File

@ -29,6 +29,7 @@ inputs:
fz-new-order = 2008;
synapse-synapse = 2009;
synapse-matrix = 2010;
hpcstat = 2011;
};
};
gid = mkOption