1 // 2 // Copyright (c) 2013-2017 Carsten Sonne Larsen <cs@innolan.net> 3 // 4 // Permission is hereby granted, free of charge, to any person obtaining a copy 5 // of this software and associated documentation files (the "Software"), to deal 6 // in the Software without restriction, including without limitation the rights 7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 // copies of the Software, and to permit persons to whom the Software is 9 // furnished to do so, subject to the following conditions: 10 // 11 // The above copyright notice and this permission notice shall be included in 12 // all copies or substantial portions of the Software. 13 // 14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 // THE SOFTWARE. 21 22 using System; 23 using System.Linq; 24 using Ntp.Analyzer.Config.Node; 25 using Ntp.Analyzer.Data; 26 using Ntp.Analyzer.Import; 27 using Ntp.Analyzer.Objects; 28 using Ntp.Analyzer.Process.Log; 29 using Ntp.Common.Log; 30 using Ntp.Common.Process; 31 32 namespace Ntp.Analyzer.Process.Description 33 { 34 /// <summary> 35 /// Job which read statistics about an ntp host and saves the result to a database. 36 /// </summary> 37 public sealed class HostStatJob : JobDescription 38 { HostStatJob(StatConfiguration config, LogBase log)39 public HostStatJob(StatConfiguration config, LogBase log) 40 : base(config, log) 41 { 42 this.config = config; 43 } 44 45 private readonly StatConfiguration config; 46 47 public override ThreadType ThreadType => ThreadType.MultiThreaded; 48 49 public override string JobType => "Host statistics"; 50 51 public override int Priority => 2; 52 InternalExecute()53 protected override void InternalExecute() 54 { 55 var host = DataFace.Instance.Hosts.SingleOrDefault(h => h.Id == config.HostId); 56 if (host == null) 57 { 58 Log.HostNotFound(config.HostId); 59 return; 60 } 61 62 var bulk = config.Bulk == null 63 ? new ReadingBulk(host.Name, config.TimeStamp) 64 : DataFace.Instance.ReadingBulks.Single(b => b.Name == config.Bulk.Name); 65 66 var importer = ImportFactory.CreateHostImporter(config.ServerName, config.ServerType, host, bulk, Log); 67 68 try 69 { 70 importer.Execute(); 71 } 72 catch (Exception e) 73 { 74 Log.HostImportError(e); 75 return; 76 } 77 78 foreach (var reading in importer) 79 { 80 DataFace.Instance.HostReadings.Save(reading); 81 } 82 } 83 } 84 }