/// <summary> /// 根据给定的一对标识符所对应的对象,异步检索二者之间可能的路径。 /// </summary> /// <param name="id1">源点对象标识符。此标识符可以是论文(Id)或作者(AA.AuId)。</param> /// <param name="id2">漏点对象标识符。此标识符可以是论文(Id)或作者(AA.AuId)。</param> /// <returns> /// 一个 Task 。其运行结果是一个集合(ICollection),集合中的每一个项目是一个数组,代表一条路径。 /// 数组按照 id1 → id2 的顺序返回路径途经的所有节点。 /// 合法的节点类型包括 /// 论文(Id), 研究领域(F.Fid), 期刊(J.JId), 会议(C.CId), 作者(AA.AuId), 组织(AA.AfId)。 /// </returns> /// <remarks> /// 此函数应该是线程安全的……吧? /// </remarks> public override async Task <IReadOnlyCollection <KgNode[]> > FindPathsAsync(long id1, long id2) { Logger.Magik.Enter(this, $"{id1} -> {id2}"); var sw = Stopwatch.StartNew(); // 先找到实体/作者再说。 var nodes = await Task.WhenAll(BeginExplorationAt(id1), BeginExplorationAt(id2)); var node1 = nodes[0]; var node2 = nodes[1]; if (node1 == null) { throw new ArgumentException($"在 MAG 中找不到指定的 Id/AuId:{id1}。", nameof(id1)); } if (node2 == null) { throw new ArgumentException($"在 MAG 中找不到指定的 Id/AuId:{id2}。", nameof(id2)); } #if DEBUG _Node1 = node1; _Node2 = node2; #endif // 开始搜索。 var hops = await Task.WhenAll( FindHop12PathsAsync(node1, node2), FindHop3PathsAsync(node1, node2)); var result = MultiCollectionView.Create(hops); Debug.Assert(result.IsDistinct(ArrayEqualityComparer <KgNode> .Default)); Logger.Magik.Trace(this, "在 {0} - {1} 之间找到了 {2} 条路径。", node1, node2, result.Count); TimerLogger.TraceTimer("Analyzer", sw); Logger.Magik.Exit(this); return(result); }
public void AddWaitTime(string message, int msWait) { waitableTasks.Add(Task.Run(() => { var tl = new TimerLogger(message, msWait, 1000, this.Logger); tl.CompletionEvent.WaitOne(); })); }
public void Run() { if (string.IsNullOrEmpty(SavePath)) { Logger.Log("Save path is empty. Will save to desktop\n"); SavePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "edwFactors.txt"); } ; var states = BuildMeasurementList(); foreach (var m in states) { var jr = new Job(m); jr.DepthOfMeasurentMM = DepthOfMeasurementMM; if (Math.Abs(_scan1D.LastKnowPositionMM - DepthOfMeasurementMM) > 0.1) { Logger.Log($"Changing depth to {DepthOfMeasurementMM} mm\n"); _scan1D.GoToDepth(jr.DepthOfMeasurentMM); } for (int n = 0; n < RepeatMeasurements; n++) { var fov = EnergyHelper.IsPhoton(m.Energy) ? $"{m.X1 * 2} x {m.Y1 * 2}" : m.Accessory; Logger.Log($"Working on {m.Energy}, Depth {jr.DepthOfMeasurentMM}, {m.Accessory} , Measurement {n + 1}\n\n"); _linac.SetMachineState(m); //Start measuring _el.Reset(); _el.StartMeasurement(); if (n == 0) { _linac.BeamOn(); } else { _linac.RepeatBeam(); } var waitTime = _linac.WaitMsForMU(m.MU, true); using (var t = new TimerLogger("Waiting on beam completion", waitTime, 1000, this.Logger)) { Thread.Sleep(waitTime); } //Stop and get measurement _el.StopMeasurement(); var measured = _el.GetValue().Measurement; Logger?.Log($"Measured : {measured}\n"); jr.AddMeasurement(_el.GetValue().Measurement); } //Save results JobWriter.AppendResult(SavePath, jr); } }
private async Task RequestLoggingMiddleware(IOwinContext context, Func <Task> next) { var request = context.Request; var sw = Stopwatch.StartNew(); requestLogger.WriteVerbose($"{request.RemoteIpAddress} {request.Method}: {request.Uri}"); await next(); var response = context.Response; requestLogger.WriteVerbose($"{request.RemoteIpAddress} {request.Method}: {request.Uri} -> {response.StatusCode} {response.ContentType} {response.ContentLength}"); TimerLogger.TraceTimer("Request", sw); }
public async Task <IHttpActionResult> Get(long id1, long id2) { var sw = Stopwatch.StartNew(); var analyzer = AnalyzerFactory.GetAnalyzer(); try { var paths = await analyzer.FindPathsAsync(id1, id2); // 返回只要 Id 就可以了。 // 由于结构比较简单,所以可以强行 json 。 var resultBuilder = new StringBuilder("["); var isFirst = true; foreach (var path in paths) { if (isFirst) { isFirst = false; } else { resultBuilder.Append(",\n"); } resultBuilder.Append("["); for (int j = 0; j < path.Length; j++) { if (j > 0) { resultBuilder.Append(","); } resultBuilder.Append(path[j].Id); } resultBuilder.Append("]"); } resultBuilder.Append("]"); var resp = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(resultBuilder.ToString(), null, Utility.JsonMediaType) }; AnalyzerFactory.PutAnalyzer(analyzer); return(new ResponseMessageResult(resp)); } finally { analyzer.LogStatistics(); analyzer.SearchClient.LogStatistics(); TimerLogger.TraceTimer("MagikController", sw); } }
static void Main(string[] args) { var linac = new CSeriesLinac(); linac.Initialize("COM9"); var logger = new Logger(); logger.Logged += (log) => Console.WriteLine(log); linac.Logger = logger; var ms = MachineState.InitNew(); ms.Energy = Energy._6X; ms.X1 = 5; ms.X2 = 5; linac.SetMachineState(ms); var ss = ServiceModeSession.Instance; ss.Logger = logger; ss.AddWaitTime("test", 7000); ss.Wait(); var time = new TimerLogger("Test", 7000, 1000, logger); time.CompletionEvent.WaitOne(); Console.WriteLine("Timer complete"); Console.Read(); var max = new Max4000(); max.Initialize("COM1"); var verify = max.Verify(); var status = max.GetStatus(); var dv = new DoseView1D(); dv.Initialize("COM3"); dv.GoToDepth(64.2).Wait(); var test = dv.GetOrigin(); //var linac = new CSeriesLinac(); //linac.Initialize("COM5"); // linac.OverrideDefaultInterlocks(); //var of = @"C:\Users\variansupport\Desktop\photonOoutputFactors.txt"; //var edwOF = @"C:\Users\variansupport\Desktop\edwFactors.txt"; //var jobs = JobResultReader.Read(of); //var edwJobs = JobResultReader.Read(edwOF).ToList(); //var table = AccessoryOFProcessor.GetTableRows(edwJobs); //foreach(var t in table) //{ // t.PrintToConsole(); //} //Console.ReadLine(); //var dv = new DoseView1D(); //dv.Initalize("COM12"); //var max = new Max4000(); //max.Initialize("COM9"); //max.Verify(); //// max.Zero().Wait(); //var bias = max.SetBias(Autodrive.Electrometers.Bias.NEG_100PERC); //max.SetMode(Autodrive.Electrometers.MeasureMode.CHARGE); //var linac = new CSeriesLinac(); //linac.Initialize("COM10"); //var ofTest = new EDWFactors(linac, max, dv); //ofTest.Logger.Logged += Logger_Logged; //ofTest.Run(); // var session = ServiceModeSession.Instance; // session.Keyboard = new VetraKeyboard("COM3"); // session.KeySpeedMs = 100; //// session.EnterDefaultPassword(); // session.ResetConsoleState(); // //session.ToggleDefaultInterlocks(); // session.MachineState.GantryRot = 180; // session.MachineState.CollimatorRot = 180; // session.MachineState.X1 = 5.0; // session.MachineState.X2 = 5.0; // session.MachineState.Y1 = 5.0; // session.MachineState.Y2 = 5.0; // session.MachineState.CouchLat = 100.2; // session.MachineState.CouchVert = 127.9; // session.MachineState.CouchLng = 54.4; //MonthlyMechanicals.InitializePosition(); //MonthlyMechanicals.CouchStarShot(); Console.Read(); // var tasks = new List<ITask>(); }
private static void SeedProductPhones(int seedNumber) { try { using (var timerLogger = new TimerLogger("Seeding db with phones")) using (var bulkInsert = DocumentStoreHolder.Store.BulkInsert(options.Database)) { Log.Information("Started building the faker database objects"); var platform = Builder <Platform> .CreateListOfSize(200).All() .With(p => p.Chipset = Builder <Chipset> .CreateNew().Build()) .With(p => p.Cpu = Builder <Cpu> .CreateNew().Build()).With( p => p.Os = Builder <Os> .CreateNew() .With(o => o.NameList = new List <string>(Lorem.Words(5))).Build()) .Random(100).Build(); var memory = Builder <Memory> .CreateListOfSize(30).All() .With(m => m.Internal = Builder <InternalMemory> .CreateNew().Build()) .With(m => m.External = Builder <ExternalMemory> .CreateNew().Build()).Random(15).Build(); var frontCamera = Builder <Camera> .CreateListOfSize(45).All() .With(f => f.Specs = new List <string>(Lorem.Paragraphs(3))) .With(f => f.Video = new List <string>(Lorem.Words(2))) .With(f => f.Features = new List <string>(Lorem.Sentences(4))).Random(30).Build(); var backCamera = Builder <Camera> .CreateListOfSize(45).All() .With(f => f.Specs = new List <string>(Lorem.Paragraphs(2))) .With(f => f.Video = new List <string>(Lorem.Words(3))) .With(f => f.Features = new List <string>(Lorem.Sentences(6))).Random(25).Build(); var sound = Builder <Sound> .CreateListOfSize(10).All() .With(s => s.Feature = new List <string>(Lorem.Sentences(2))).Build(); var battery = Builder <Battery> .CreateListOfSize(25).All() .With(s => s.Feature = new List <string>(Lorem.Sentences(3))).Build(); var feature = Builder <Feature> .CreateListOfSize(30).All() .With(s => s.Sensors = new List <string>(Lorem.Words(5))).Random(30).Build(); var store = Builder <StoreProduct> .CreateListOfSize(50).All().Random(30).Build(); var mobilePhones = Builder <MobilePhone> .CreateListOfSize(seedNumber).All() .With(p => p.Platform = Pick <Platform> .RandomItemFrom(platform)) .With(p => p.Memory = Pick <Memory> .RandomItemFrom(memory)) .With(p => p.FrontCamera = Pick <Camera> .RandomItemFrom(frontCamera)) .With(p => p.BackCamera = Pick <Camera> .RandomItemFrom(backCamera)) .With(p => p.Sound = Pick <Sound> .RandomItemFrom(sound)) .With(p => p.Battery = Pick <Battery> .RandomItemFrom(battery)) .With(p => p.Features = Pick <Feature> .RandomItemFrom(feature)) .With(p => p.Comms = Builder <Comms> .CreateNew().Build()) .With(p => p.Id = Guid.NewGuid().ToString()).With(p => p.CategoryId = Guid.NewGuid().ToString()) .With( p => p.ProductName = new List <string> { $"Product-{Identification.UKNationalInsuranceNumber()}" }).With(p => p.Store = Pick <StoreProduct> .RandomItemFrom(store)) .Build(); timerLogger.OnTimedEventTemplate("Processing: {0} items so far...", seedCounter); timerLogger.StartTimer(); Log.Information("Ready to start seeded database with {0:n0} phones", seedNumber); foreach (var mobilePhone in mobilePhones) { bulkInsert.Store(mobilePhone); timerLogger.UpdatePropertyValue(seedCounter++); } } } catch (Exception unknownException) { Log.Error( unknownException, "Failed while trying to seed the {Database} database with {SeedNumber} phones.", options.Database, seedNumber); } finally { Log.Information("Seeded database with {0:n0} phones", seedCounter); seedCounter = 0; } }