ln.skyscanner/checks/Hostalive.cs

66 lines
2.1 KiB
C#

// /**
// * File: Hostalive.cs
// * Author: haraldwolff
// *
// * This file and it's content is copyrighted by the Author and / or copyright holder.
// * Any use wihtout proper permission is illegal and may lead to legal actions.
// *
// *
// **/
using System;
using ln.types;
using ln.skyscanner.entities;
using ln.perfdb;
using System.Net.NetworkInformation;
using ln.logging;
using ln.perfdb.storage;
using ln.skyscanner.services;
using ln.skyscanner.perfvalue;
namespace ln.skyscanner.checks
{
public class Hostalive : SkyCheck
{
Ping Ping { get; }
public Hostalive()
: base("hostalive")
{
Ping = new Ping();
}
public override bool IsCritical => true;
public override bool IsValid(Node node) => node.PrimaryIP != null;
public override void Check(CheckService checkService, ref SkyCheckState checkState, Node node)
{
long roundTripTime = 0;
int success = 0;
int n;
for (n = 0; n < 4; n++)
{
PingReply reply = Ping.Send(node.PrimaryIP, 250);
if (reply.Status == IPStatus.Success)
{
success++;
roundTripTime += reply.RoundtripTime;
}
}
float fSuccess = (float)success / (float)n;
node.WritePerformanceValue(checkService.PerformanceValueService, Name, "replies", fSuccess, node.DeviceType == DeviceType.UNKNOWN ? Double.MinValue : 0.8, double.MaxValue, node.DeviceType == DeviceType.UNKNOWN ? Double.MinValue : 0.6, double.MaxValue);
if (success > 0)
{
roundTripTime /= success;
node.WritePerformanceValue(checkService.PerformanceValueService, Name, "rta", roundTripTime, 0, 80, 0, 140);
}
foreach (PerformanceValue pv in checkState.PerformanceValues)
pv.IgnoreLimits = ((node.DeviceType == DeviceType.UNKNOWN) && (node.DeviceType == DeviceType.PTMP));
checkState.BaseCheckState = CheckState.OK;
}
}
}