131 lines
4.4 KiB
C#
131 lines
4.4 KiB
C#
// /**
|
|
// * File: CheckerApi.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 System.Collections.Generic;
|
|
using ln.http;
|
|
using ln.http.resources;
|
|
using ln.types.threads;
|
|
using ln.perfdb.storage;
|
|
using System.Net;
|
|
using ln.skyscanner.checks;
|
|
using ln.types.odb;
|
|
using System.Linq;
|
|
using ln.json.mapping;
|
|
namespace ln.skyscanner.http
|
|
{
|
|
public class CheckerApi : JsonCallResource
|
|
{
|
|
public CheckerApi(Resource container)
|
|
: base(container, "checker")
|
|
{
|
|
new Checks(this);
|
|
}
|
|
|
|
[Callable]
|
|
public PoolJob[] CurrentPoolJobs => SkyScanner.Instance.Checker.CurrentJobs;
|
|
[Callable]
|
|
public PoolJob[] QueuedPoolJobs => SkyScanner.Instance.Checker.QueuedJobs;
|
|
[Callable]
|
|
public SkyCheckState[] Issues
|
|
{
|
|
get
|
|
{
|
|
Query issueQuery = Query.EqualsNot<SkyCheckState>("CheckState", CheckState.OK);
|
|
return SkyScanner.Instance.Entities.SkyCheckStates.Query(issueQuery).ToArray();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class Checks : BaseResource
|
|
{
|
|
public Checks(CheckerApi container)
|
|
:base(container,"checks")
|
|
{ }
|
|
|
|
public override bool HandlesDispatching => true;
|
|
|
|
public override bool Contains(string name)
|
|
{
|
|
return base.Contains(name) || SkyScanner.Instance.Checker.ContainsPerfFile(name);
|
|
}
|
|
public override Resource GetResource(string name)
|
|
{
|
|
if (base.Contains(name))
|
|
return base.GetResource(name);
|
|
|
|
if (SkyScanner.Instance.Checker.ContainsPerfFile(name))
|
|
{
|
|
return new Check(this, name);
|
|
}
|
|
|
|
throw new KeyNotFoundException();
|
|
}
|
|
public override HttpResponse GetResponse(HttpRequest httpRequest, Queue<string> pathStack)
|
|
{
|
|
if (pathStack.Count == 0)
|
|
return GetResponse(httpRequest);
|
|
|
|
string perfName = WebUtility.UrlDecode(String.Join("/", pathStack));
|
|
|
|
Resource perfResource = GetResource(perfName);
|
|
return perfResource.GetResponse(httpRequest);
|
|
}
|
|
|
|
public override HttpResponse GetResponse(HttpRequest httpRequest)
|
|
{
|
|
HttpResponse response = new HttpResponse(httpRequest);
|
|
response.SetHeader("content-type", "application/json");
|
|
response.ContentWriter.Write(JSONMapper.DefaultMapper.ToJson(SkyScanner.Instance.Checker.PerfNames));
|
|
return response;
|
|
}
|
|
|
|
class Check : Resource
|
|
{
|
|
public Check(Checks container,String perfName)
|
|
:base(container,perfName)
|
|
{}
|
|
|
|
public override void AddResource(Resource resource) => throw new NotImplementedException();
|
|
public override bool Contains(string name) => throw new NotImplementedException();
|
|
public override IEnumerable<Resource> GetResources() => throw new NotImplementedException();
|
|
public override void RemoveResource(Resource resource) => throw new NotImplementedException();
|
|
|
|
public override HttpResponse GetResponse(HttpRequest httpRequest)
|
|
{
|
|
PerfFile perfFile = SkyScanner.Instance.Checker.GetPerfFile(Name);
|
|
PerfValue[] perfValues = null;
|
|
|
|
int interval = 3600;
|
|
|
|
if (httpRequest.Query.ContainsKey("interval"))
|
|
interval = int.Parse(httpRequest.Query["interval"]);
|
|
|
|
lock (perfFile)
|
|
{
|
|
perfFile.EnsureOpen();
|
|
perfValues = perfFile.QueryTime(interval, 0);
|
|
perfFile.Close();
|
|
}
|
|
|
|
HttpResponse response = new HttpResponse(httpRequest);
|
|
response.SetHeader("content-type", "application/json");
|
|
response.ContentWriter.Write(JSONMapper.DefaultMapper.ToJson(perfValues).ToString());
|
|
|
|
return response;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|