// /** // * 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 Newtonsoft.Json; 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; class Checks : BaseResource { public Checks(CheckerApi container) :base(container,"checks") { } 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) { HttpResponse response = new HttpResponse(httpRequest); response.SetHeader("content-type", "application/json"); response.ContentWriter.Write(JsonConvert.SerializeObject(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 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(JsonConvert.SerializeObject(perfValues)); return response; } } } } }