mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
Issue #283
Updates Icecast TCP broadcaster to correctly handle content type:text/html message that normally follows mount point in use error received from broadcastify. Changes mount point in use broadcast state to be a temporary error so that the stream will attempt to reconnect after receiving this error. Updates logging to include memory allocation/usage metrics with each logging entry in order to support debugging issues related to high memory usage situations. Updates initial application logging to better identify the host system operating environment.
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
|
<conversionRule conversionWord="memory_usage" converterClass="util.MemoryUsageLogger" />
|
||||||
|
|
||||||
<timestamp key="appstart" datePattern="HHmmss"/>
|
<timestamp key="appstart" datePattern="HHmmss"/>
|
||||||
|
|
||||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
@@ -9,7 +11,7 @@
|
|||||||
<maxHistory>10</maxHistory>
|
<maxHistory>10</maxHistory>
|
||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder>
|
<encoder>
|
||||||
<pattern>%-25(%d{yyyyMMdd HHmmss.SSS} [%thread]) %-5level %logger{30} - %msg%n</pattern>
|
<pattern>%-25(%d{yyyyMMdd HHmmss.SSS} [%thread]) %-5level %logger{30} - %msg %memory_usage%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
@@ -19,7 +21,7 @@
|
|||||||
|
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<encoder>
|
<encoder>
|
||||||
<pattern>%-12(%d{HH:mm:ss.SSS}) %-5level %logger{25} - %msg%n</pattern>
|
<pattern>%-12(%d{HH:mm:ss.SSS}) %-5level %logger{25} - %msg %memory_usage%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public enum BroadcastState
|
|||||||
/**
|
/**
|
||||||
* Specified mount point is already in use
|
* Specified mount point is already in use
|
||||||
*/
|
*/
|
||||||
MOUNT_POINT_IN_USE("Mount Point In Use", true),
|
MOUNT_POINT_IN_USE("Mount Point In Use", false),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Server is not known or reachable
|
* Server is not known or reachable
|
||||||
|
|||||||
@@ -325,6 +325,10 @@ public class IcecastTCPAudioBroadcaster extends IcecastAudioBroadcaster
|
|||||||
{
|
{
|
||||||
setBroadcastState(BroadcastState.MOUNT_POINT_IN_USE);
|
setBroadcastState(BroadcastState.MOUNT_POINT_IN_USE);
|
||||||
}
|
}
|
||||||
|
else if(message.contains("Content-Type: text/html"))
|
||||||
|
{
|
||||||
|
//Disregard ... this normally follows the mount point in use error
|
||||||
|
}
|
||||||
else if(message.contains("Invalid Password") ||
|
else if(message.contains("Invalid Password") ||
|
||||||
message.contains("Authentication Required"))
|
message.contains("Authentication Required"))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import icon.IconManager;
|
|||||||
import map.MapService;
|
import map.MapService;
|
||||||
import module.log.EventLogManager;
|
import module.log.EventLogManager;
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
@@ -80,16 +81,16 @@ public class SDRTrunk implements Listener<TunerEvent>
|
|||||||
|
|
||||||
public SDRTrunk()
|
public SDRTrunk()
|
||||||
{
|
{
|
||||||
mLog.info("");
|
|
||||||
mLog.info("*******************************************************************");
|
mLog.info("*******************************************************************");
|
||||||
mLog.info("**** sdrtrunk: a trunked radio and digital decoding application ***");
|
mLog.info("**** sdrtrunk: a trunked radio and digital decoding application ***");
|
||||||
mLog.info("**** website: https://github.com/dsheirer/sdrtrunk ***");
|
mLog.info("**** website: https://github.com/dsheirer/sdrtrunk ***");
|
||||||
mLog.info("*******************************************************************");
|
mLog.info("*******************************************************************");
|
||||||
mLog.info("");
|
mLog.info("Memory Logging Format: [Used/Allocated PercentUsed%]");
|
||||||
mLog.info("Host CPU Cores: " + Runtime.getRuntime().availableProcessors());
|
mLog.info("Host CPU Cores: " + Runtime.getRuntime().availableProcessors());
|
||||||
mLog.info("Host Memory Total: " + Runtime.getRuntime().totalMemory());
|
mLog.info("Host OS Name: " + System.getProperty("os.name"));
|
||||||
mLog.info("Host Memory Max: " + Runtime.getRuntime().maxMemory());
|
mLog.info("Host OS Arch: " + System.getProperty("os.arch"));
|
||||||
mLog.info("Host Memory Free: " + Runtime.getRuntime().freeMemory());
|
mLog.info("Host OS Version: " + System.getProperty("os.version"));
|
||||||
|
mLog.info("Host Max Java Memory: " + FileUtils.byteCountToDisplaySize(Runtime.getRuntime().maxMemory()));
|
||||||
|
|
||||||
//Setup the application home directory
|
//Setup the application home directory
|
||||||
Path home = getHomePath();
|
Path home = getHomePath();
|
||||||
|
|||||||
54
src/util/MemoryUsageLogger.java
Normal file
54
src/util/MemoryUsageLogger.java
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* sdrtrunk
|
||||||
|
* Copyright (C) 2014-2017 Dennis Sheirer
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
package util;
|
||||||
|
|
||||||
|
import ch.qos.logback.classic.pattern.ClassicConverter;
|
||||||
|
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom logging plugin for logging memory usage with logback
|
||||||
|
*
|
||||||
|
* Add the following to the logback.xml configuration file to use this custom converter:
|
||||||
|
*
|
||||||
|
* <conversionRule conversionWord="memory_usage" converterClass="util.MemoryUsageLogger" />
|
||||||
|
*
|
||||||
|
* Update the encoder pattern to include %memory_usage within the pattern
|
||||||
|
*/
|
||||||
|
public class MemoryUsageLogger extends ClassicConverter
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public String convert(ILoggingEvent iLoggingEvent)
|
||||||
|
{
|
||||||
|
//Method argument is ignored - we simply return memory usage statistics
|
||||||
|
long allocated = Runtime.getRuntime().totalMemory();
|
||||||
|
long free = Runtime.getRuntime().freeMemory();
|
||||||
|
long used = allocated - free;
|
||||||
|
|
||||||
|
int usedPercentage = (int)((double)(used) / (double)allocated * 100.0);
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.append("[").append(FileUtils.byteCountToDisplaySize(used).replace(" ", ""));
|
||||||
|
sb.append("/").append(FileUtils.byteCountToDisplaySize(allocated).replace(" ", ""));
|
||||||
|
sb.append(" ").append(usedPercentage).append("%]");
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user