private static void GrainReport(string[] args) { var grainId = ConstructGrainId(args, "GrainReport"); var silos = GetSiloAddresses(); if (silos == null || silos.Count == 0) { return; } var reports = new List <DetailedGrainReport>(); foreach (var silo in silos) { WriteStatus(string.Format("**Calling GetDetailedGrainReport({0}, {1})", silo, grainId)); try { ISiloControl siloControl = SiloControlFactory.GetSystemTarget(Constants.SiloControlId, silo); DetailedGrainReport grainReport = siloControl.GetDetailedGrainReport(grainId).Result; reports.Add(grainReport); } catch (Exception exc) { WriteStatus(string.Format("**Failed to get grain report from silo {0}. Exc: {1}", silo, exc.ToString())); } } foreach (var grainReport in reports) { WriteStatus(grainReport.ToString()); } LookupGrain(args); }
internal async Task <ConcurrentDictionary <SiloAddress, SiloRuntimeStatistics> > RefreshStatistics() { if (logger.IsVerbose) { logger.Verbose("RefreshStatistics."); } await silo.LocalScheduler.RunOrQueueTask(() => { var tasks = new List <Task>(); List <SiloAddress> members = silo.LocalSiloStatusOracle.GetApproximateSiloStatuses(true).Keys.ToList(); foreach (var siloAddress in members) { var capture = siloAddress; Task task = SiloControlFactory.GetSystemTarget(Constants.SiloControlId, capture) .GetRuntimeStatistics() .ContinueWith((Task <SiloRuntimeStatistics> statsTask) => { if (statsTask.Status == TaskStatus.RanToCompletion) { UpdateRuntimeStatistics(capture, statsTask.Result); } else { logger.Warn(ErrorCode.Placement_RuntimeStatisticsUpdateFailure_3, String.Format("An unexpected exception was thrown from RefreshStatistics by ISiloControl.GetRuntimeStatistics({0}). Will keep using stale statistics.", capture), statsTask.Exception); } }); tasks.Add(task); task.Ignore(); } return(Task.WhenAll(tasks)); }, SchedulingContext); return(periodicStats); }
private ISiloControl GetSiloControlReference(SiloAddress silo) { return(SiloControlFactory.GetSystemTarget(Constants.SiloControlId, silo)); }