using System; using ln.application; using ln.application.service; using System.Threading; using System.IO; using ln.types.odb; using ln.types.odb.mapped; using ln.skyscanner.entities; using ln.skyscanner.crawl; using ln.types.net; using ln.skyscanner.checks; using ln.logging; namespace ln.skyscanner.services { public class EntityService : ApplicationServiceBase { public string BasePath { get; private set; } public ODB ODB { get; private set; } public ODBCollection NodeCollection { get; private set; } public ODBCollection SubnetCollection { get; private set; } public ODBCollection PointOfPresenceCollection { get; private set; } public ODBCollection L2SegmentCollection { get; private set; } public ODBCollection CrawledHosts { get; private set; } public ODBCollection CrawledSubnets { get; private set; } public ODBCollection BlockedNetworks { get; private set; } public ODBCollection SkyCheckStates { get; private set; } public EntityService() :base("Entity Service") { } public override void ServiceMain(IApplicationInterface applicationInterface) { BasePath = Path.Combine( CurrentApplicationInterface.Arguments["base-path"].Value, "entities" ); Logging.Log(LogLevel.INFO, "Entity Service: Initializing"); ODB = new ODB(BasePath); NodeCollection = ODB.GetCollection(); NodeCollection.EnableStrongCache(true); NodeCollection.EnsureIndex("uniqueIdentity", true); NodeCollection.EnsureIndeces( "PrimaryIP", "Interfaces[].ConfiguredIPs[].IP", "Interfaces[].ConfiguredIPs[].Network" ); SubnetCollection = ODB.GetCollection(); SubnetCollection.EnsureIndeces("Network"); PointOfPresenceCollection = ODB.GetCollection(); PointOfPresenceCollection.EnsureIndeces("ForeignName"); L2SegmentCollection = ODB.GetCollection(); L2SegmentCollection.EnsureIndeces("Network", "PoPs"); CrawledHosts = ODB.GetCollection(); CrawledHosts.EnsureIndeces("PrimaryIP", "IPAddresses[]"); CrawledSubnets = ODB.GetCollection(); BlockedNetworks = ODB.GetCollection("blockedNetworks"); SkyCheckStates = ODB.GetCollection(); SkyCheckStates.EnableStrongCache(true); SkyCheckStates.EnsureIndeces("Node"); SkyCheckStates.EnsureUniqueness("Node", "CheckName"); lock (Thread.CurrentThread) { Monitor.Wait(Thread.CurrentThread); } BasePath = null; } } }