public InstanceStatistics(System.Net.IPEndPoint serverEndPoint, Server server, Instance instance, ServerStats serverStats, State serviceState)
{
string memcachedFileVersion = null;
if (File.Exists(Configuration.Default.MemcachedBinarySource) == true)
memcachedFileVersion = FileVersionInfo.GetVersionInfo(Configuration.Default.MemcachedBinarySource).FileVersion;
_serverName = server.ServerName;
_instanceName = instance.DisplayName;
_serviceState = serviceState;
Instance = instance;
_statusIconIndex = StatusIconIndex.CommunicationError;
_statusTooltip = Constants.TooltipCommunicationError;
if (serverStats != null && serverStats.GetRaw(serverEndPoint, StatItem.Version) != null)
{
foreach (StatItem statItem in Enum.GetValues(typeof(Enyim.Caching.Memcached.StatItem)))
{
switch (statItem)
{
case StatItem.BytesRead:
_bytesRead = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.BytesWritten:
_bytesWritten = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.ConnectionCount:
_connectionCount = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.ConnectionStructures:
_connectionStructures = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.GetCount:
_getCount = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.GetHits:
_getHits = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.GetMisses:
_getMisses = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.ItemCount:
_itemCount = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.MaxBytes:
_maxBytes = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.ServerTime:
string serverTimeRaw = serverStats.GetRaw(serverEndPoint, statItem);
int serverTimeSeconds;
if (serverTimeRaw != null && Int32.TryParse(serverTimeRaw, out serverTimeSeconds) == true)
_serverTime = new DateTime(1970, 1, 1).AddSeconds(serverTimeSeconds).ToLocalTime().ToString();
else
_serverTime = "<unknown>";
break;
case StatItem.SetCount:
_setCount = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.TotalConnections:
_totalConnections = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.TotalItems:
_totalItems = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.Uptime:
string uptimeRaw = serverStats.GetRaw(serverEndPoint, statItem);
int uptimeSeconds;
if (uptimeRaw != null && Int32.TryParse(uptimeRaw, out uptimeSeconds) == true)
_uptime = TimeSpan.FromSeconds(uptimeSeconds).ToString();
else
_uptime = "<unknown>";
break;
case StatItem.UsedBytes:
_usedBytes = serverStats.GetValue(serverEndPoint, statItem);
break;
case StatItem.Version:
_version = serverStats.GetRaw(serverEndPoint, statItem);
break;
}
}
}
if (_serviceState != State.Running && _serviceState != State.Unknown)
{
_statusIconIndex = StatusIconIndex.ServiceDown;
_statusTooltip = Constants.TooltipServiceDown;
}
else if (_serviceState == State.Unknown)
{
_statusIconIndex = StatusIconIndex.ServiceNonControllable;
_statusTooltip = Constants.TooltipServiceNonControllable;
}
else if (_version == null || _version == String.Empty)
{
_statusIconIndex = StatusIconIndex.CommunicationError;
_statusTooltip = Constants.TooltipCommunicationError;
}
else if (memcachedFileVersion != null && memcachedFileVersion != _version)
{
_statusIconIndex = StatusIconIndex.NeedsUpdate;
_statusTooltip = Constants.TooltipNeedsUpdate;
}
else
{
_statusIconIndex = StatusIconIndex.Up;
_statusTooltip = Constants.TooltipUp;
}
}