Exemplo n.º 1
0
        protected override void EndProcessing()
        {
            writer.WriteEndElement();
            writer.WriteEndDocument();
            writer.Flush();
            writer.Close();

            progress.RecordType = ProgressRecordType.Completed;
            WriteProgress(progress);

            Console.WriteLine("Done");
            MAStatistics.StopOperation();
            Console.WriteLine(MAStatistics.ToString());

            if (this.timer != null)
            {
                this.timer.Stop();
                this.timer.Elapsed -= this.timer_Elapsed;
            }

            if (writer != null)
            {
                writer.Close();
            }
        }
Exemplo n.º 2
0
        protected override void ProcessRecord()
        {
            foreach (AcmaPSObject obj in this.ExportObjects)
            {
                try
                {
                    obj.Hologram.PreLoadAVPs();
                    CSEntryChangeXmlExport.ExportToXml(obj.Hologram, writer);
                    MAStatistics.AddImportOperation();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error exporting object {0}: {1}: {2}", this.currentObjectCount, obj.Hologram.ObjectID, ex.Message);
                }

                //progress.PercentComplete = Convert.ToInt32(((decimal)this.currentObjectCount / this.totalObjectCount) * 100);
                progress.StatusDescription = string.Format("Importing {0}/{1}... {2} ({3} objects/sec)", this.currentObjectCount, this.totalObjectCount, obj.Hologram.ObjectID, this.sampleOpsSec);
                progress.CurrentOperation  = string.Format("Average rate: {0} objects/sec", this.averageOpsSec);
                progress.SecondsRemaining  = this.secondsRemaining;

                this.WriteProgress(progress);

                this.currentObjectCount++;

                obj.Dispose();
            }
        }
Exemplo n.º 3
0
        public void ImportEnd(ImportReleaseRequest request)
        {
            try
            {
                CachedImportRequest originalRequest;

                try
                {
                    originalRequest = GetFromCache(request.Context);
                }
                catch (InvalidOperationException)
                {
                    Logger.WriteLine("Could not release the request as it was not found in the cache");
                    return;
                }

                if (originalRequest.HighWatermark != null)
                {
                    if (request.NormalTermination)
                    {
                        ActiveConfig.DB.ClearDeltas(originalRequest.HighWatermark);
                    }
                }

                RemoveFromCache(request.Context);

                MAStatistics.StopOperation();
                Logger.WriteLine(MAStatistics.ToString());
            }
            catch (Exception ex)
            {
                Logger.WriteLine("Could not release the request");
                Logger.WriteException(ex);
            }
        }
Exemplo n.º 4
0
 protected override void ProcessRecord()
 {
     using (MAStatistics stats = this.MAInstance.Statistics)
     {
         this.WriteObject(stats);
     }
 }
Exemplo n.º 5
0
        public void ExportEnd()
        {
            Logger.WriteLine("Export Complete");
            Logger.WriteSeparatorLine('*');

            MAStatistics.StopOperation();
            Logger.WriteLine(MAStatistics.ToString());
        }
Exemplo n.º 6
0
        public void ExportStart()
        {
            Logger.WriteSeparatorLine('*');
            Logger.WriteLine("Starting Export");

            MAStatistics.StartOperation(MAOperationType.Export);
            this.ProcessOperationEvents(AcmaEventOperationType.Export);
        }
Exemplo n.º 7
0
        private void ProduceCSEntryChanges(ResultEnumerator results, Schema schema, CachedImportRequest request)
        {
            ParallelOptions op = new ParallelOptions();

            op.CancellationToken      = new CancellationToken();
            request.CancellationToken = op.CancellationToken;
            op.MaxDegreeOfParallelism = 1;

            Parallel.ForEach(results, op, item =>
            {
                if (op.CancellationToken.IsCancellationRequested)
                {
                    return;
                }

                string objectClassName = item.ObjectClass == null ? item.DeltaObjectClassName : item.ObjectClass.Name;
                SchemaType type        = schema.Types.FirstOrDefault(t => t.Name == objectClassName);

                if (type == null)
                {
                    return;
                }

                CSEntryChange csentry = null;

                try
                {
                    csentry = item.ToCSEntryChange(type);
                    MAStatistics.AddImportOperation();
                }
                catch (Exception ex)
                {
                    MAStatistics.AddImportError();

                    if (csentry == null)
                    {
                        csentry = CSEntryChange.Create();
                    }

                    if (string.IsNullOrWhiteSpace(csentry.DN))
                    {
                        csentry.ErrorCodeImport = MAImportError.ImportErrorCustomStopRun;
                    }
                    else
                    {
                        csentry.ErrorCodeImport = MAImportError.ImportErrorCustomContinueRun;
                    }

                    csentry.ErrorName   = ex.Message;
                    csentry.ErrorDetail = ex.StackTrace;
                }

                request.Queue.Enqueue(csentry);
            });

            request.ProducerComplete = true;
        }
Exemplo n.º 8
0
        protected override void BeginProcessing()
        {
            try
            {
                if (this.ExportObjects == null || this.ExportObjects.Length == 0)
                {
                    ThrowTerminatingError(new ErrorRecord(new ArgumentNullException("ExportObjects"), "NoObjects", ErrorCategory.InvalidArgument, null));
                }

                this.totalObjectCount = this.ExportObjects.Length;

                Global.ThrowIfNotConnected(this);
                this.writer = null;
                MAStatistics.StartOperation(MAOperationType.Import);
                Console.WriteLine("Writing export file... ");

                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent       = true;
                settings.IndentChars  = "  ";
                settings.NewLineChars = Environment.NewLine;
                writer = XmlWriter.Create(this.FileName, settings);
                writer.WriteStartDocument();
                writer.WriteStartElement("acma-export");
                progress = new ProgressRecord(0, "Export", "Starting export");
                this.operationStartTime      = DateTime.Now;
                this.sampleIntervalStartTime = DateTime.Now;

                this.timer          = new Timer(1000);
                this.timer.Elapsed += this.timer_Elapsed;
                this.timer.Start();

                progress.RecordType      = ProgressRecordType.Processing;
                progress.PercentComplete = 0;
                this.WriteProgress(progress);
            }
            catch (Exception ex)
            {
                if (this.timer != null)
                {
                    this.timer.Stop();
                    this.timer.Elapsed -= this.timer_Elapsed;
                    this.timer          = null;
                }

                if (writer != null)
                {
                    writer.Close();
                }

                ThrowTerminatingError(new ErrorRecord(ex, "UnknownError", ErrorCategory.InvalidOperation, null));
            }
        }
Exemplo n.º 9
0
        public ImportResponse ImportStart(ImportStartRequest request)
        {
            Logger.WriteLine("Import request received");
            MAStatistics.StartOperation(MAOperationType.Import);

            ImportResponse      response      = new ImportResponse();
            CachedImportRequest cachedRequest = new CachedImportRequest();

            cachedRequest.Request = request;

            if (cachedRequest.Request.ImportType == OperationType.Delta)
            {
                this.ProcessOperationEvents(AcmaEventOperationType.DeltaImport);
            }
            else
            {
                this.ProcessOperationEvents(AcmaEventOperationType.FullImport);
            }

            byte[] watermark = ActiveConfig.DB.GetHighWatermarkMAObjectsDelta();
            response.Watermark          = watermark == null ? null : Convert.ToBase64String(watermark);
            cachedRequest.HighWatermark = watermark;
            Logger.WriteLine("Got delta watermark: {0}", response.Watermark);

            ResultEnumerator enumerator;

            if (cachedRequest.Request.ImportType == OperationType.Delta)
            {
                enumerator = ActiveConfig.DB.EnumerateMAObjectsDelta(watermark);
            }
            else
            {
                enumerator = ActiveConfig.DB.EnumerateMAObjects(cachedRequest.Request.Schema.Types.Select(t => t.Name).ToList(), null, null);
            }

            cachedRequest.Queue = new ConcurrentQueue <CSEntryChange>();
            cachedRequest.Count = enumerator.TotalCount;
            this.StartProducerThread(enumerator, request.Schema, cachedRequest);

            response.Context = Guid.NewGuid().ToString();

            this.AddToCache(response.Context, cachedRequest);
            this.GetResultPage(response, request.PageSize);

            return(response);
        }
Exemplo n.º 10
0
        public ExportResponse ExportPage(ExportRequest request)
        {
            try
            {
                Monitor.Enter(ServiceMain.Lock);

                ExportResponse response = new ExportResponse();
                response.Results = new List <CSEntryChangeResult>();
                IList <AttributeChange> anchorchanges;

                foreach (CSEntryChange csentryChange in request.CSEntryChanges)
                {
                    try
                    {
                        bool referenceRetryRequired;
                        anchorchanges = CSEntryExport.PutExportEntry(csentryChange, out referenceRetryRequired);

                        if (referenceRetryRequired)
                        {
                            Logger.WriteLine(string.Format("Reference attribute not available for csentry {0}. Flagging for retry", csentryChange.DN));
                            response.Results.Add(CSEntryChangeResult.Create(csentryChange.Identifier, anchorchanges, MAExportError.ExportActionRetryReferenceAttribute));
                        }
                        else
                        {
                            response.Results.Add(CSEntryChangeResult.Create(csentryChange.Identifier, anchorchanges, MAExportError.Success));
                        }
                    }
                    catch (Exception ex)
                    {
                        MAStatistics.AddExportError();

                        response.Results.Add(this.GetExportChangeResultFromException(csentryChange, ex));
                    }
                }

                return(response);
            }
            finally
            {
                Monitor.Exit(ServiceMain.Lock);
            }
        }
Exemplo n.º 11
0
        protected void UpdateProgress(bool pending, int runNumber)
        {
            if (runNumber < 0)
            {
                return;
            }

            RunDetails s = this.MAInstance.GetRunDetail(runNumber);

            if (s == null)
            {
                return;
            }

            if (this.runProfile == null)
            {
                this.runProfile = this.MAInstance.RunProfiles[s.RunProfileName];
                this.stats      = this.MAInstance.Statistics;
            }

            StepDetails d = s.StepDetails.FirstOrDefault();

            if (d == null)
            {
                return;
            }

            string description;

            if (pending)
            {
                description = $"Waiting for {this.MAInstance.Name} to finish {s.RunProfileName}";
            }
            else
            {
                description = this.MAInstance.Name;
            }

            if (this.lastStepNumber == 0 || this.lastStepNumber != d.StepNumber)
            {
                this.lastStepNumber = d.StepNumber;
                this.countHistory   = new FixedSizedQueue <ProgressItem>(30);
            }

            ProgressRecord r = new ProgressRecord(0, description, string.Format(
                                                      $"Performing {this.runProfile.Name} step {d.StepNumber}/{this.runProfile.RunSteps.Count}: {d.StepDefinition.StepTypeDescription}"))
            {
                RecordType = ProgressRecordType.Processing
            };

            int    processed;
            double total;
            int    remaining = 0;

            if (this.GetCounts(d, out processed, out total))
            {
                int percentComplete = (int)((processed / total) * 100);
                r.PercentComplete = percentComplete > 100 ? 0 : percentComplete;
                remaining         = (int)total - processed;
            }

            if (processed > 0)
            {
                double objpersec = 0;

                int      changedCount;
                TimeSpan?timespan;

                this.GetCountDiff(processed, out changedCount, out timespan);

                if (changedCount > 0 && timespan.HasValue)
                {
                    objpersec = changedCount / timespan.Value.TotalSeconds;
                }

                if (remaining > 0 && objpersec > 0)
                {
                    int remainingSeconds = (int)(remaining / objpersec);
                    r.SecondsRemaining = remainingSeconds > 0 ? remainingSeconds : 0;
                }

                if (objpersec > 0 && !double.IsInfinity(objpersec))
                {
                    r.StatusDescription += $" ({objpersec:N2} obj/sec)";
                }
            }
            else
            {
                r.StatusDescription += " (waiting for MA to start)";
            }

            this.WriteProgress(r);
        }
Exemplo n.º 12
0
        protected override void ProcessRecord()
        {
            Global.ThrowIfNotConnected(this);

            try
            {
                UnitTestFile file = this.LoadUnitTestFile();
                UnitTestFile.BreakOnTestFailure = this.BreakOnTestFailure;

                MAStatistics.StartOperation(MAOperationType.Export);
                Console.WriteLine(string.Empty.PadRight(79, '-'));
                Console.WriteLine("Executing unit tests from: {0}", Path.GetFileName(ActiveConfig.XmlConfig.FileName));
                Console.WriteLine();
                UnitTest.UnitTestStartingEvent            += UnitTest_UnitTestStartingEvent;
                UnitTest.UnitTestCompletedEvent           += UnitTest_UnitTestCompletedEvent;
                UnitTestGroup.UnitTestGroupStartingEvent  += UnitTestGroup_UnitTestGroupStartingEvent;
                UnitTestGroup.UnitTestGroupCompletedEvent += UnitTestGroup_UnitTestGroupCompletedEvent;
                UnitTestOutcomes report = file.Execute();
                MAStatistics.StopOperation();
                Console.WriteLine();

                Console.WriteLine(string.Empty.PadRight(79, '-'));
                if (report.TestCount > 0)
                {
                    Console.WriteLine("Executed {0} tests", report.TestCount);

                    if (report.TestCount == report.TestSuccessfulCount)
                    {
                        Console.ForegroundColor = ConsoleColor.Green;
                    }

                    Console.WriteLine("{0} ({1}%) successful", report.TestSuccessfulCount, report.TestSuccessfulPercent.ToString("D"));
                    Console.ForegroundColor = ConsoleColor.Gray;

                    if (report.TestFailedCount > 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                    }

                    Console.WriteLine("{0} ({1}%) failed", report.TestFailedCount, report.TestFailedPercent.ToString("D"));
                    Console.ForegroundColor = ConsoleColor.Gray;

                    if (report.TestInconclusiveCount > 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                    }

                    Console.WriteLine("{0} ({1}%) inconclusive", report.TestInconclusiveCount, report.TestInconclusivePercent.ToString("D"));
                    Console.ForegroundColor = ConsoleColor.Gray;


                    if (report.TestErrorCount > 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                    }

                    Console.WriteLine("{0} ({1}%) error{2}", report.TestErrorCount, report.TestErrorPercent.ToString("D"), report.TestErrorCount == 1 ? string.Empty : "s");
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
                else
                {
                    Console.WriteLine("No tests were executed");
                }
                Console.WriteLine(string.Empty.PadRight(79, '-'));

                Console.WriteLine(MAStatistics.ToString());

                Console.WriteLine(string.Empty.PadRight(79, '-'));

                if (!string.IsNullOrWhiteSpace(this.HtmlReportFileName))
                {
                    Console.Write("Writing test results to: {0}... ", this.HtmlReportFileName);
                    report.ToHtml(this.HtmlReportFileName);
                    Console.WriteLine("Done");
                }
            }
            catch (Exception ex)
            {
                ErrorRecord error = new ErrorRecord(ex, "UnknownError", ErrorCategory.NotSpecified, null);
                ThrowTerminatingError(error);
            }
            finally
            {
                UnitTest.UnitTestStartingEvent            -= UnitTest_UnitTestStartingEvent;
                UnitTest.UnitTestCompletedEvent           -= UnitTest_UnitTestCompletedEvent;
                UnitTestGroup.UnitTestGroupStartingEvent  -= UnitTestGroup_UnitTestGroupStartingEvent;
                UnitTestGroup.UnitTestGroupCompletedEvent -= UnitTestGroup_UnitTestGroupCompletedEvent;
            }
        }
Exemplo n.º 13
0
        protected override void ProcessRecord()
        {
            Global.ThrowIfNotConnected(this);

            try
            {
                MAStatistics.StartOperation(MAOperationType.Export);
                ActiveConfig.DB.CanCache = true;

                Console.WriteLine("Reading import file... ");

                StreamReader r      = new StreamReader(this.FileName);
                XmlReader    reader = XmlReader.Create(r);
                var          doc    = XDocument.Load(reader);

                Console.WriteLine("Importing objects... ");
                this.totalObjectCount = doc.Root.Elements().Count();
                ProgressRecord progress = new ProgressRecord(0, "Import", "Starting import");

                this.operationStartTime      = DateTime.Now;
                this.sampleIntervalStartTime = DateTime.Now;

                this.timer          = new Timer(1000);
                this.timer.Elapsed += this.timer_Elapsed;
                this.timer.Start();

                progress.RecordType      = ProgressRecordType.Processing;
                progress.PercentComplete = 0;
                this.WriteProgress(progress);

                foreach (var node in doc.Root.Elements("object-change"))
                {
                    bool refretry;
                    //XElement element = node;
                    AcmaCSEntryChange csentry = CSEntryChangeXmlImport.ImportFromXml(node, !this.IgnoreMissingAttributes.IsPresent);

                    progress.PercentComplete   = Convert.ToInt32(((decimal)this.currentObjectCount / this.totalObjectCount) * 100);
                    progress.StatusDescription = string.Format("Importing {0}/{1}... {2} ({3} objects/sec)", this.currentObjectCount, this.totalObjectCount, csentry.DN, this.sampleOpsSec);
                    progress.CurrentOperation  = string.Format("Average rate: {0} objects/sec", this.averageOpsSec);
                    progress.SecondsRemaining  = this.secondsRemaining;

                    this.WriteProgress(progress);

                    try
                    {
                        CSEntryExport.PutExportEntry(csentry, out refretry);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Error importing object {0}: {1}: {2}", this.currentObjectCount, csentry.DN, ex.Message);
                    }

                    this.currentObjectCount++;
                }

                progress.RecordType = ProgressRecordType.Completed;
                WriteProgress(progress);

                Console.WriteLine("Done");
                MAStatistics.StopOperation();
                Console.WriteLine(MAStatistics.ToString());
            }
            catch (Exception ex)
            {
                Logger.WriteException(ex);
                ErrorRecord error = new ErrorRecord(ex, "UnknownError", ErrorCategory.NotSpecified, this.FileName);
                ThrowTerminatingError(error);
            }
            finally
            {
                if (this.timer != null)
                {
                    this.timer.Stop();
                    this.timer.Elapsed -= this.timer_Elapsed;
                }
            }
        }