This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new f24400b56f Add `ServerStatusService` in the core module (#10083)
f24400b56f is described below

commit f24400b56f63683bb1d0148c6a33daefc71ae53c
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Sat Dec 3 20:37:50 2022 +0800

    Add `ServerStatusService` in the core module (#10083)
---
 docs/en/changes/changes.md                         |  4 +-
 .../skywalking/oap/server/core/CoreModule.java     |  4 +-
 .../oap/server/core/CoreModuleProvider.java        |  2 +
 .../oap/server/core/status/BootingStatus.java}     | 28 +++++++-----
 .../server/core/status/ServerStatusService.java    | 51 ++++++++++++++++++++++
 .../skywalking/oap/server/core/CoreModuleTest.java |  2 +-
 .../oap/server/starter/OAPServerBootstrap.java     | 13 +++---
 7 files changed, 81 insertions(+), 23 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 4e7bd5c6b4..d1a9e01160 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -2,14 +2,12 @@
 
 #### Project
 
-
 #### OAP Server
 
+* Add `ServerStatusService` in the core module to provide a new way to expose 
booting status to other modules.
 
 #### UI
 
-
 #### Documentation
 
-
 All issues and pull requests are 
[here](https://github.com/apache/skywalking/milestone/160?closed=1)
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
index 5c67c10a53..66d9934e97 100755
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
@@ -33,6 +33,7 @@ import 
org.apache.skywalking.oap.server.core.oal.rt.OALEngineLoaderService;
 import 
org.apache.skywalking.oap.server.core.profiling.ebpf.EBPFProfilingMutationService;
 import 
org.apache.skywalking.oap.server.core.profiling.ebpf.EBPFProfilingQueryService;
 import 
org.apache.skywalking.oap.server.core.profiling.trace.ProfileTaskMutationService;
+import 
org.apache.skywalking.oap.server.core.profiling.trace.ProfileTaskQueryService;
 import org.apache.skywalking.oap.server.core.query.AggregationQueryService;
 import org.apache.skywalking.oap.server.core.query.AlarmQueryService;
 import org.apache.skywalking.oap.server.core.query.BrowserLogQueryService;
@@ -41,7 +42,6 @@ import 
org.apache.skywalking.oap.server.core.query.LogQueryService;
 import org.apache.skywalking.oap.server.core.query.MetadataQueryService;
 import org.apache.skywalking.oap.server.core.query.MetricsMetadataQueryService;
 import org.apache.skywalking.oap.server.core.query.MetricsQueryService;
-import 
org.apache.skywalking.oap.server.core.profiling.trace.ProfileTaskQueryService;
 import org.apache.skywalking.oap.server.core.query.RecordQueryService;
 import org.apache.skywalking.oap.server.core.query.TagAutoCompleteQueryService;
 import org.apache.skywalking.oap.server.core.query.TopNRecordsQueryService;
@@ -52,6 +52,7 @@ import 
org.apache.skywalking.oap.server.core.remote.client.RemoteClientManager;
 import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
 import org.apache.skywalking.oap.server.core.server.HTTPHandlerRegister;
 import org.apache.skywalking.oap.server.core.source.SourceReceiver;
+import org.apache.skywalking.oap.server.core.status.ServerStatusService;
 import org.apache.skywalking.oap.server.core.storage.model.IModelManager;
 import org.apache.skywalking.oap.server.core.storage.model.ModelCreator;
 import org.apache.skywalking.oap.server.core.storage.model.ModelManipulator;
@@ -73,6 +74,7 @@ public class CoreModule extends ModuleDefine {
     public Class[] services() {
         List<Class> classes = new ArrayList<>();
         classes.add(ConfigService.class);
+        classes.add(ServerStatusService.class);
         classes.add(DownSamplingConfigService.class);
         classes.add(NamingControl.class);
         classes.add(IComponentLibraryCatalogService.class);
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
index 2f96358ae6..429830cfab 100755
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
@@ -81,6 +81,7 @@ import 
org.apache.skywalking.oap.server.core.server.HTTPHandlerRegisterImpl;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.core.source.SourceReceiver;
 import org.apache.skywalking.oap.server.core.source.SourceReceiverImpl;
+import org.apache.skywalking.oap.server.core.status.ServerStatusService;
 import org.apache.skywalking.oap.server.core.storage.PersistenceTimer;
 import org.apache.skywalking.oap.server.core.storage.StorageException;
 import org.apache.skywalking.oap.server.core.storage.model.IModelManager;
@@ -240,6 +241,7 @@ public class CoreModuleProvider extends ModuleProvider {
         httpServer.initialize();
 
         this.registerServiceImplementation(ConfigService.class, new 
ConfigService(moduleConfig));
+        this.registerServiceImplementation(ServerStatusService.class, new 
ServerStatusService(getManager()));
         this.registerServiceImplementation(
             DownSamplingConfigService.class, new 
DownSamplingConfigService(moduleConfig.getDownsampling()));
 
diff --git 
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/BootingStatus.java
similarity index 62%
copy from 
oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
copy to 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/BootingStatus.java
index 4d69c69966..4de30fcff8 100644
--- 
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/BootingStatus.java
@@ -16,16 +16,24 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core;
+package org.apache.skywalking.oap.server.core.status;
 
-import org.junit.Assert;
-import org.junit.Test;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.Setter;
 
-public class CoreModuleTest {
-    @Test
-    public void testOpenServiceList() {
-        CoreModule coreModule = new CoreModule();
-
-        Assert.assertEquals(37, coreModule.services().length);
-    }
+/**
+ * Booting status indicate whether the current server starts successfully.
+ */
+@Getter
+@Setter(AccessLevel.PACKAGE)
+public class BootingStatus {
+    /**
+     * The status of OAP is fully booted successfully.
+     */
+    private boolean isBooted = false;
+    /**
+     * The uptime in milliseconds if {@link #isBooted} is true;
+     */
+    private long uptime = 0;
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/ServerStatusService.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/ServerStatusService.java
new file mode 100644
index 0000000000..27a3b328df
--- /dev/null
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/status/ServerStatusService.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.core.status;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.apache.skywalking.oap.server.library.module.Service;
+import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
+import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
+import org.apache.skywalking.oap.server.telemetry.api.MetricsTag;
+
+/**
+ * The server status service provides the indicators for the current server 
status.
+ * Notice, this should not be treated as a kind of health checker or self 
telemetry.
+ * For more, this helps modules to be aware of current OAP server status.
+ *
+ * @since 9.4.0
+ */
+@RequiredArgsConstructor
+public class ServerStatusService implements Service {
+    private final ModuleManager manager;
+    private BootingStatus bootingStatus = new BootingStatus();
+
+    public void bootedNow(long uptime) {
+        bootingStatus.setBooted(true);
+        bootingStatus.setUptime(uptime);
+        manager.find(TelemetryModule.NAME)
+               .provider()
+               .getService(MetricsCreator.class)
+               .createGauge("uptime", "oap server start up time", 
MetricsTag.EMPTY_KEY, MetricsTag.EMPTY_VALUE)
+               // Set uptime to second
+               .setValue(uptime / 1000d);
+    }
+
+}
diff --git 
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
 
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
index 4d69c69966..e62c4ad3d6 100644
--- 
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
+++ 
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/CoreModuleTest.java
@@ -26,6 +26,6 @@ public class CoreModuleTest {
     public void testOpenServiceList() {
         CoreModule coreModule = new CoreModule();
 
-        Assert.assertEquals(37, coreModule.services().length);
+        Assert.assertEquals(38, coreModule.services().length);
     }
 }
diff --git 
a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerBootstrap.java
 
b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerBootstrap.java
index 2b8f4b8e99..f1f2a2d37d 100644
--- 
a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerBootstrap.java
+++ 
b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerBootstrap.java
@@ -19,14 +19,13 @@
 package org.apache.skywalking.oap.server.starter;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.RunningMode;
+import org.apache.skywalking.oap.server.core.status.ServerStatusService;
 import org.apache.skywalking.oap.server.core.version.Version;
 import 
org.apache.skywalking.oap.server.library.module.ApplicationConfiguration;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.starter.config.ApplicationConfigLoader;
-import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
-import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
-import org.apache.skywalking.oap.server.telemetry.api.MetricsTag;
 
 /**
  * Starter core. Load the core configuration file, and initialize the startup 
sequence through {@link ModuleManager}.
@@ -43,12 +42,10 @@ public class OAPServerBootstrap {
             ApplicationConfiguration applicationConfiguration = 
configLoader.load();
             manager.init(applicationConfiguration);
 
-            manager.find(TelemetryModule.NAME)
+            manager.find(CoreModule.NAME)
                    .provider()
-                   .getService(MetricsCreator.class)
-                   .createGauge("uptime", "oap server start up time", 
MetricsTag.EMPTY_KEY, MetricsTag.EMPTY_VALUE)
-                   // Set uptime to second
-                   .setValue(System.currentTimeMillis() / 1000d);
+                   .getService(ServerStatusService.class)
+                   .bootedNow(System.currentTimeMillis());
 
             log.info("Version of OAP: {}", Version.CURRENT);
 

Reply via email to