Skip to content

Commit

Permalink
Refactor logger
Browse files Browse the repository at this point in the history
- Make none-blocker
- Specify connect timeout
  • Loading branch information
mekya committed Mar 22, 2021
1 parent 2f0f738 commit 97b46c9
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 52 deletions.
126 changes: 74 additions & 52 deletions src/main/java/io/antmedia/logger/AntmediaAppender.java
@@ -1,8 +1,14 @@
package io.antmedia.logger;

import java.io.IOException;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.http.HttpHeaders;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.StringEntity;
Expand All @@ -19,71 +25,87 @@
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.ThrowableProxyUtil;
import ch.qos.logback.core.AppenderBase;
import io.antmedia.rest.RestServiceBase;
import io.antmedia.rest.model.Version;
import io.antmedia.statistic.StatsCollector;

/**
* Appender for logback in charge of sending the logged events to a Firebase analytic server.
*/
public class AntmediaAppender extends AppenderBase<ILoggingEvent> {

protected static final Logger logger = LoggerFactory.getLogger(AntmediaAppender.class);

@Override
public void append(ILoggingEvent iLoggingEvent) {
if (LoggerEnvironment.isManagingThread()) {
return;
}
LoggerEnvironment.startManagingThread();
try {
IThrowableProxy throwbleProxy = iLoggingEvent.getThrowableProxy();
if (throwbleProxy != null) {
sendErrorToAnalytic(throwbleProxy);
}
} catch (Exception e) {
addError("An exception occurred", e);
} finally {
LoggerEnvironment.stopManagingThread();
}
}

@Override
public void stop() {
LoggerEnvironment.startManagingThread();
try {
if (!isStarted()) {
return;
}
super.stop();
} catch (Exception e) {
addError("An exception occurred", e);
} finally {
LoggerEnvironment.stopManagingThread();
}
}

private static ExecutorService executor = Executors.newSingleThreadExecutor();

@Override
public void append(ILoggingEvent iLoggingEvent) {
if (LoggerEnvironment.isManagingThread()) {
return;
}
LoggerEnvironment.startManagingThread();
try {
IThrowableProxy throwbleProxy = iLoggingEvent.getThrowableProxy();
if (throwbleProxy != null) {
sendErrorToAnalytic(throwbleProxy);
}
} catch (Exception e) {
addError("An exception occurred", e);
} finally {
LoggerEnvironment.stopManagingThread();
}
}

@Override
public void stop() {
LoggerEnvironment.startManagingThread();
try {
if (!isStarted()) {
return;
}
super.stop();
} catch (Exception e) {
addError("An exception occurred", e);
} finally {
LoggerEnvironment.stopManagingThread();
}
}

public void sendErrorToAnalytic(IThrowableProxy throwbleProxy) {

String errorDetail = ThrowableProxyUtil.asString(throwbleProxy);
String instanceId = Launcher.getInstanceId();

JsonObject instance = new JsonObject();
instance.addProperty(StatsCollector.INSTANCE_ID, instanceId);
instance.addProperty("errorDetail", errorDetail);

try (CloseableHttpClient client = getHttpClient()){
HttpUriRequest post = RequestBuilder.post().setUri("https://us-central1-ant-media-server-analytics.cloudfunctions.net/sendErrorDetail").setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
.setEntity(new StringEntity(instance.toString())).build();

client.execute(post);

executor.submit(() ->
{
String errorDetail = ThrowableProxyUtil.asString(throwbleProxy);
String instanceId = Launcher.getInstanceId();

JsonObject instance = new JsonObject();
instance.addProperty(StatsCollector.INSTANCE_ID, instanceId);
instance.addProperty("errorDetail", errorDetail);
Version softwareVersion = RestServiceBase.getSoftwareVersion();
instance.addProperty("versionName", softwareVersion.getVersionName());
instance.addProperty("versionType", softwareVersion.getVersionType());
instance.addProperty("versionBuild", softwareVersion.getBuildNumber());

try (CloseableHttpClient client = getHttpClient())
{
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(2 * 1000).setSocketTimeout(5*1000).build();

HttpRequestBase post = (HttpRequestBase)RequestBuilder.post().setUri("https://us-central1-ant-media-server-analytics.cloudfunctions.net/sendErrorDetail")
.setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
.setEntity(new StringEntity(instance.toString())).build();

post.setConfig(requestConfig);

client.execute(post);

}catch (IOException e) {
logger.error("Couldn't connect Ant Media Server Analytics");
logger.error("Couldn't connect Ant Media Server Analytics: {} " , ExceptionUtils.getStackTrace(e) );
}
});
}

public static CloseableHttpClient getHttpClient() {
return HttpClients.custom().setRedirectStrategy(new LaxRedirectStrategy())
.build();
return HttpClients.custom().setRedirectStrategy(new LaxRedirectStrategy()).build();
}

}
11 changes: 11 additions & 0 deletions src/test/java/io/antmedia/test/settings/ServerSettingsTest.java
Expand Up @@ -50,6 +50,8 @@ public void testNativeLogLevel() {
assertEquals(Logging.Severity.LS_WARNING, settings.getWebRTCLogLevel());
assertEquals(ServerSettings.LOG_LEVEL_WARN, settings.getNativeLogLevel());



}

@Test
Expand All @@ -60,5 +62,14 @@ public void testNodeGroup() {
assertEquals("group1", settings.getNodeGroup());

}

@Test
public void testDefaultHttpPort() {
ServerSettings settings = new ServerSettings();

settings.setDefaultHttpPort(5090);
assertEquals(5090,settings.getDefaultHttpPort());

}

}

0 comments on commit 97b46c9

Please sign in to comment.