From 08e27d1c211b269d738670579e48dc735ae6d3f2 Mon Sep 17 00:00:00 2001
From: Vitaly Takmazov
Date: Fri, 12 Apr 2024 17:01:30 +0300
Subject: systemd watchdog service
---
src/main/java/com/juick/config/AppConfig.java | 7 +++
.../com/juick/service/SystemdWatchdogService.java | 54 ++++++++++++++++++++++
.../java/com/juick/service/WatchdogService.java | 31 +++++++++++++
.../com/juick/www/controllers/SocialLogin.java | 3 --
4 files changed, 92 insertions(+), 3 deletions(-)
create mode 100644 src/main/java/com/juick/service/SystemdWatchdogService.java
create mode 100644 src/main/java/com/juick/service/WatchdogService.java
(limited to 'src/main/java')
diff --git a/src/main/java/com/juick/config/AppConfig.java b/src/main/java/com/juick/config/AppConfig.java
index 25ba2b86..cb99c079 100644
--- a/src/main/java/com/juick/config/AppConfig.java
+++ b/src/main/java/com/juick/config/AppConfig.java
@@ -34,6 +34,7 @@ import org.commonmark.node.Link;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
@@ -154,4 +155,10 @@ public class AppConfig {
RequestRejectedHandler requestRejectedHandler() {
return new HttpStatusRequestRejectedHandler();
}
+
+ @Bean
+ @ConditionalOnProperty("juick.watchdog.enabled")
+ WatchdogService watchdogService() {
+ return new SystemdWatchdogService();
+ }
}
diff --git a/src/main/java/com/juick/service/SystemdWatchdogService.java b/src/main/java/com/juick/service/SystemdWatchdogService.java
new file mode 100644
index 00000000..6fb95e9e
--- /dev/null
+++ b/src/main/java/com/juick/service/SystemdWatchdogService.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2008-2024, Juick
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.juick.service;
+
+import info.faljse.SDNotify.SDNotify;
+import jakarta.annotation.Nonnull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.scheduling.annotation.Scheduled;
+
+
+public class SystemdWatchdogService implements WatchdogService {
+ private static final Logger logger = LoggerFactory.getLogger("juick");
+ @Override
+ public void onApplicationReady(@Nonnull ApplicationReadyEvent event) {
+ if (SDNotify.isAvailable()) {
+ logger.debug("Systemd is configured");
+ SDNotify.sendNotify();
+ } else {
+ logger.debug("Systemd is not configured");
+ }
+ if (SDNotify.isWatchdogEnabled()) {
+ logger.debug("Watchdog timeout is {}", SDNotify.getWatchdogFrequency());
+ SDNotify.sendWatchdog();
+ } else {
+ logger.debug("Systemd watchdog is not configured");
+ }
+
+ }
+ @Override
+ @Scheduled(fixedRate = 15000)
+ public void onWatchdogTimeout() {
+ if (SDNotify.isWatchdogEnabled()) {
+ logger.debug("Sending Systemd watchdog");
+ SDNotify.sendWatchdog();
+ }
+ }
+}
diff --git a/src/main/java/com/juick/service/WatchdogService.java b/src/main/java/com/juick/service/WatchdogService.java
new file mode 100644
index 00000000..7d22bf58
--- /dev/null
+++ b/src/main/java/com/juick/service/WatchdogService.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2008-2024, Juick
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.juick.service;
+
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+
+public interface WatchdogService {
+
+ @Async
+ @EventListener
+ void onApplicationReady(ApplicationReadyEvent event);
+
+ void onWatchdogTimeout();
+}
diff --git a/src/main/java/com/juick/www/controllers/SocialLogin.java b/src/main/java/com/juick/www/controllers/SocialLogin.java
index bae9deb2..75099e50 100644
--- a/src/main/java/com/juick/www/controllers/SocialLogin.java
+++ b/src/main/java/com/juick/www/controllers/SocialLogin.java
@@ -23,9 +23,7 @@ import com.github.scribejava.core.builder.ServiceBuilder;
import com.github.scribejava.core.model.*;
import com.github.scribejava.core.oauth.AccessTokenRequestParams;
import com.github.scribejava.core.oauth.AuthorizationUrlBuilder;
-import com.github.scribejava.core.oauth.OAuth10aService;
import com.github.scribejava.core.oauth.OAuth20Service;
-import com.github.scribejava.core.pkce.PKCEService;
import com.juick.model.ext.facebook.User;
import com.juick.model.ext.vk.UsersResponse;
import com.juick.service.*;
@@ -47,7 +45,6 @@ import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.security.authentication.RememberMeAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.RememberMeServices;
--
cgit v1.2.3