summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2025-06-12 21:56:22 -0400
committerLLLL Colonq <llll@colonq>2025-06-12 21:56:22 -0400
commit0f8a0bf2c0dce27cb832896731e2047e07310ebc (patch)
tree063e068dca876db0375b02ae6d3e4fbe89785ff7
parentc45abd29a5e4a9146cbe94789b7b3787eb02e5a5 (diff)
fig-bus: Properly handle bus close, wait longer between restarts
-rw-r--r--fig-bus/src/Fig/Bus/Binary/Utils.hs15
-rw-r--r--fig-web/src/Fig/Web/Secure.hs1
-rw-r--r--flake.nix14
3 files changed, 14 insertions, 16 deletions
diff --git a/fig-bus/src/Fig/Bus/Binary/Utils.hs b/fig-bus/src/Fig/Bus/Binary/Utils.hs
index a270fcc..8add010 100644
--- a/fig-bus/src/Fig/Bus/Binary/Utils.hs
+++ b/fig-bus/src/Fig/Bus/Binary/Utils.hs
@@ -15,13 +15,14 @@ intFromLEBytes [] = 0
intFromLEBytes (x:xs) = shiftL (intFromLEBytes xs) 8 .|. fromIntegral x
readLengthPrefixed :: Handle -> IO (Maybe ByteString)
-readLengthPrefixed h = do
- n <- hGet h 4
- case intFromLEBytes (BS.unpack n) of
- 0 -> pure $ Just ""
- len -> do
- x <- hGet h len
- pure $ Just x
+readLengthPrefixed h = hGet h 4 >>= \case
+ n | BS.null n -> pure Nothing
+ n ->
+ case intFromLEBytes (BS.unpack n) of
+ 0 -> pure $ Just ""
+ len -> do
+ x <- hGet h len
+ pure $ Just x
readEvent :: Handle -> IO (Maybe EventType)
readEvent h = do
diff --git a/fig-web/src/Fig/Web/Secure.hs b/fig-web/src/Fig/Web/Secure.hs
index 9626aaa..303089b 100644
--- a/fig-web/src/Fig/Web/Secure.hs
+++ b/fig-web/src/Fig/Web/Secure.hs
@@ -57,6 +57,7 @@ app args = do
]
Wai.Static.<|> Wai.Static.hasPrefix "assets"
Wai.Static.<|> Wai.Static.hasPrefix "newton"
+ Wai.Static.<|> Wai.Static.hasPrefix "ranch"
, Wai.Static.addBase args.cfg.assetPath
]
onGet "/" do
diff --git a/flake.nix b/flake.nix
index 4d83efd..7515ee4 100644
--- a/flake.nix
+++ b/flake.nix
@@ -43,10 +43,7 @@
fig-monitor-twitch = self.callCabal2nix "fig-monitor-twitch" ./fig-monitor-twitch {};
fig-monitor-discord = self.callCabal2nix "fig-monitor-discord" ./fig-monitor-discord {};
fig-monitor-irc = self.callCabal2nix "fig-monitor-irc" ./fig-monitor-irc {};
- fig-monitor-bullfrog = self.callCabal2nix "fig-monitor-bullfrog" ./fig-monitor-bullfrog {};
fig-bridge-irc-discord = self.callCabal2nix "fig-bridge-irc-discord" ./fig-bridge-irc-discord {};
- fig-bless = self.callCabal2nix "fig-bless" ./fig-bless {};
- fig-emulator-gb = self.callCabal2nix "fig-emulator-gb" ./fig-emulator-gb {};
fig-web = self.callCabal2nix "fig-web" ./fig-web {};
};
haskellPackages = pkgs.haskell.packages.ghc94.override {
@@ -152,8 +149,13 @@
systemd.services."colonq.fig-monitor-twitch-live-watcher" = {
wantedBy = ["multi-user.target"];
after = ["colonq.fig-bus.service"];
+ unitConfig = {
+ StartLimitInterval = "3600";
+ StartLimitBurst = "5";
+ };
serviceConfig = {
Restart = "on-failure";
+ RestartSec = "300";
ExecStart = "${haskellPackages.fig-monitor-twitch}/bin/fig-monitor-twitch live-checker --bus-host ${cfg.busHost} --bus-port ${toString cfg.busPort} --config ${cfg.configFile}";
DynamicUser = "yes";
RuntimeDirectory = "colonq.fig-monitor-twitch-live-watcher";
@@ -403,11 +405,8 @@
fig-monitor-twitch
fig-monitor-discord
fig-monitor-irc
- fig-monitor-bullfrog
fig-bridge-irc-discord
- fig-bless
fig-web
- fig-emulator-gb
];
withHoogle = true;
buildInputs = [
@@ -424,10 +423,7 @@
figMonitorTwitch = haskellPackages.fig-monitor-twitch;
figMonitorDiscord = haskellPackages.fig-monitor-discord;
figMonitorIRC = haskellPackages.fig-monitor-irc;
- figMonitorBullfrog = haskellPackages.fig-monitor-bullfrog;
figBridgeIRCDiscord = haskellPackages.fig-bridge-irc-discord;
- figBless = haskellPackages.fig-bless;
- figEmulatorGB = haskellPackages.fig-emulator-gb;
figWeb = haskellPackages.fig-web;
};
apps.x86_64-linux.default = {