Search in sources :

Example 16 with Status

use of org.apache.dubbo.common.status.Status in project dubbo by alibaba.

the class ConsulRegistryTest method testStatusChecker.

@Test
public void testStatusChecker() {
    RegistryStatusChecker registryStatusChecker = new RegistryStatusChecker();
    Status status = registryStatusChecker.check();
    assertThat(status.getLevel(), is(Status.Level.UNKNOWN));
    Registry registry = consulRegistryFactory.getRegistry(registryUrl);
    assertThat(registry, not(nullValue()));
    status = registryStatusChecker.check();
    assertThat(status.getLevel(), is(Status.Level.OK));
    registry.register(serviceUrl);
    status = registryStatusChecker.check();
    assertThat(status.getLevel(), is(Status.Level.OK));
}
Also used : Status(org.apache.dubbo.common.status.Status) Registry(org.apache.dubbo.registry.Registry) RegistryStatusChecker(org.apache.dubbo.registry.status.RegistryStatusChecker) Test(org.junit.jupiter.api.Test)

Example 17 with Status

use of org.apache.dubbo.common.status.Status in project dubbo by alibaba.

the class MemoryStatusCheckerTest method test.

@Test
public void test() throws Exception {
    MemoryStatusChecker statusChecker = new MemoryStatusChecker();
    Status status = statusChecker.check();
    assertThat(status.getLevel(), anyOf(is(OK), is(WARN)));
    logger.info("memory status level: " + status.getLevel());
    logger.info("memory status message: " + status.getMessage());
}
Also used : Status(org.apache.dubbo.common.status.Status) Test(org.junit.jupiter.api.Test)

Example 18 with Status

use of org.apache.dubbo.common.status.Status in project dubbo by alibaba.

the class DataSourceStatusChecker method check.

@Override
public Status check() {
    Optional<ApplicationContext> context = SpringExtensionFactory.getContexts().stream().filter(Objects::nonNull).findFirst();
    if (!context.isPresent()) {
        return new Status(Status.Level.UNKNOWN);
    }
    Map<String, DataSource> dataSources = context.get().getBeansOfType(DataSource.class, false, false);
    if (CollectionUtils.isEmptyMap(dataSources)) {
        return new Status(Status.Level.UNKNOWN);
    }
    Status.Level level = Status.Level.OK;
    StringBuilder buf = new StringBuilder();
    for (Map.Entry<String, DataSource> entry : dataSources.entrySet()) {
        DataSource dataSource = entry.getValue();
        if (buf.length() > 0) {
            buf.append(", ");
        }
        buf.append(entry.getKey());
        try (Connection connection = dataSource.getConnection()) {
            DatabaseMetaData metaData = connection.getMetaData();
            try (ResultSet resultSet = metaData.getTypeInfo()) {
                if (!resultSet.next()) {
                    level = Status.Level.ERROR;
                }
            }
            buf.append(metaData.getURL());
            buf.append("(");
            buf.append(metaData.getDatabaseProductName());
            buf.append("-");
            buf.append(metaData.getDatabaseProductVersion());
            buf.append(")");
        } catch (Throwable e) {
            logger.warn(e.getMessage(), e);
            return new Status(level, e.getMessage());
        }
    }
    return new Status(level, buf.toString());
}
Also used : Status(org.apache.dubbo.common.status.Status) Connection(java.sql.Connection) DatabaseMetaData(java.sql.DatabaseMetaData) DataSource(javax.sql.DataSource) ApplicationContext(org.springframework.context.ApplicationContext) ResultSet(java.sql.ResultSet) Map(java.util.Map)

Example 19 with Status

use of org.apache.dubbo.common.status.Status in project dubbo by alibaba.

the class ServerStatusCheckerTest method testServerStatusChecker.

@Test
public void testServerStatusChecker() throws Exception {
    int port = NetUtils.getAvailablePort(7000);
    URL url = URL.valueOf("dubbo://127.0.0.1:" + port + "/" + DemoService.class.getName());
    DemoService service = new DemoServiceImpl();
    DubboProtocol.getDubboProtocol().export(proxy.getInvoker(service, DemoService.class, url));
    StatusChecker server = ExtensionLoader.getExtensionLoader(StatusChecker.class).getExtension("server");
    Assertions.assertEquals(ServerStatusChecker.class, server.getClass());
    Status status = server.check();
    Assertions.assertEquals(Status.Level.OK, status.getLevel());
    ProtocolUtils.closeAll();
}
Also used : Status(org.apache.dubbo.common.status.Status) DemoService(org.apache.dubbo.rpc.protocol.dubbo.support.DemoService) StatusChecker(org.apache.dubbo.common.status.StatusChecker) URL(org.apache.dubbo.common.URL) DemoServiceImpl(org.apache.dubbo.rpc.protocol.dubbo.support.DemoServiceImpl) Test(org.junit.jupiter.api.Test)

Example 20 with Status

use of org.apache.dubbo.common.status.Status in project dubbo by alibaba.

the class ThreadPoolStatusChecker method check.

@Override
public Status check() {
    DataStore dataStore = ExtensionLoader.getExtensionLoader(DataStore.class).getDefaultExtension();
    Map<String, Object> executors = dataStore.get(CommonConstants.EXECUTOR_SERVICE_COMPONENT_KEY);
    StringBuilder msg = new StringBuilder();
    Status.Level level = Status.Level.OK;
    for (Map.Entry<String, Object> entry : executors.entrySet()) {
        String port = entry.getKey();
        ExecutorService executor = (ExecutorService) entry.getValue();
        if (executor instanceof ThreadPoolExecutor) {
            ThreadPoolExecutor tp = (ThreadPoolExecutor) executor;
            boolean ok = tp.getActiveCount() < tp.getMaximumPoolSize() - 1;
            Status.Level lvl = Status.Level.OK;
            if (!ok) {
                level = Status.Level.WARN;
                lvl = Status.Level.WARN;
            }
            if (msg.length() > 0) {
                msg.append(";");
            }
            msg.append("Pool status:").append(lvl).append(", max:").append(tp.getMaximumPoolSize()).append(", core:").append(tp.getCorePoolSize()).append(", largest:").append(tp.getLargestPoolSize()).append(", active:").append(tp.getActiveCount()).append(", task:").append(tp.getTaskCount()).append(", service port: ").append(port);
        }
    }
    return msg.length() == 0 ? new Status(Status.Level.UNKNOWN) : new Status(level, msg.toString());
}
Also used : Status(org.apache.dubbo.common.status.Status) DataStore(org.apache.dubbo.common.store.DataStore) ExecutorService(java.util.concurrent.ExecutorService) ThreadPoolExecutor(java.util.concurrent.ThreadPoolExecutor) Map(java.util.Map)

Aggregations

Status (org.apache.dubbo.common.status.Status)27 Test (org.junit.jupiter.api.Test)19 HashMap (java.util.HashMap)7 DataSource (javax.sql.DataSource)4 Connection (java.sql.Connection)3 Map (java.util.Map)3 Registry (org.apache.dubbo.registry.Registry)3 Matchers.containsString (org.hamcrest.Matchers.containsString)3 Matchers.isEmptyOrNullString (org.hamcrest.Matchers.isEmptyOrNullString)3 Method (java.lang.reflect.Method)2 StatusChecker (org.apache.dubbo.common.status.StatusChecker)2 RegistryStatusChecker (org.apache.dubbo.registry.status.RegistryStatusChecker)2 ApplicationContext (org.springframework.context.ApplicationContext)2 GenericWebApplicationContext (org.springframework.web.context.support.GenericWebApplicationContext)2 OperatingSystemMXBean (java.lang.management.OperatingSystemMXBean)1 DatabaseMetaData (java.sql.DatabaseMetaData)1 ResultSet (java.sql.ResultSet)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 ExecutorService (java.util.concurrent.ExecutorService)1