aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2024-04-12 17:01:30 +0300
committerGravatar Vitaly Takmazov2024-04-12 17:01:30 +0300
commit08e27d1c211b269d738670579e48dc735ae6d3f2 (patch)
treecc88035579660cf40e0b97cd8a9576fb0b44f118 /src/main
parent654ca09625623b02a2f9cf6876d9dbb9fdc00b4e (diff)
systemd watchdog service
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/juick/config/AppConfig.java7
-rw-r--r--src/main/java/com/juick/service/SystemdWatchdogService.java54
-rw-r--r--src/main/java/com/juick/service/WatchdogService.java31
-rw-r--r--src/main/java/com/juick/www/controllers/SocialLogin.java3
4 files changed, 92 insertions, 3 deletions
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 <http://www.gnu.org/licenses/>.
+ */
+
+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 <http://www.gnu.org/licenses/>.
+ */
+
+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;