/// <summary>
 /// Initializes a new instance of the PartitionPrimaryMoveAnalysisEvent class.
 /// </summary>
 /// <param name="eventInstanceId">The identifier for the FabricEvent instance.</param>
 /// <param name="timeStamp">The time event was logged.</param>
 /// <param name="partitionId">An internal ID used by Service Fabric to uniquely identify a partition. This is a
 /// randomly generated GUID when the service was created. The partition ID is unique and does not change for the
 /// lifetime of the service. If the same service was deleted and recreated the IDs of its partitions would be
 /// different.</param>
 /// <param name="metadata">Metadata about an Analysis Event.</param>
 /// <param name="whenMoveCompleted">Time when the move was completed.</param>
 /// <param name="previousNode">The name of a Service Fabric node.</param>
 /// <param name="currentNode">The name of a Service Fabric node.</param>
 /// <param name="moveReason">Move reason.</param>
 /// <param name="relevantTraces">Relevant traces.</param>
 /// <param name="category">The category of event.</param>
 /// <param name="hasCorrelatedEvents">Shows there is existing related events available.</param>
 public PartitionPrimaryMoveAnalysisEvent(
     Guid?eventInstanceId,
     DateTime?timeStamp,
     PartitionId partitionId,
     AnalysisEventMetadata metadata,
     DateTime?whenMoveCompleted,
     NodeName previousNode,
     NodeName currentNode,
     string moveReason,
     string relevantTraces,
     string category          = default(string),
     bool?hasCorrelatedEvents = default(bool?))
     : base(
         eventInstanceId,
         timeStamp,
         Common.FabricEventKind.PartitionPrimaryMoveAnalysis,
         partitionId,
         metadata,
         category,
         hasCorrelatedEvents)
 {
     whenMoveCompleted.ThrowIfNull(nameof(whenMoveCompleted));
     previousNode.ThrowIfNull(nameof(previousNode));
     currentNode.ThrowIfNull(nameof(currentNode));
     moveReason.ThrowIfNull(nameof(moveReason));
     relevantTraces.ThrowIfNull(nameof(relevantTraces));
     this.WhenMoveCompleted = whenMoveCompleted;
     this.PreviousNode      = previousNode;
     this.CurrentNode       = currentNode;
     this.MoveReason        = moveReason;
     this.RelevantTraces    = relevantTraces;
 }
 /// <summary>
 /// Initializes a new instance of the PartitionAnalysisEvent class.
 /// </summary>
 /// <param name="eventInstanceId">The identifier for the FabricEvent instance.</param>
 /// <param name="timeStamp">The time event was logged.</param>
 /// <param name="kind">The kind of FabricEvent.</param>
 /// <param name="partitionId">An internal ID used by Service Fabric to uniquely identify a partition. This is a
 /// randomly generated GUID when the service was created. The partition ID is unique and does not change for the
 /// lifetime of the service. If the same service was deleted and recreated the IDs of its partitions would be
 /// different.</param>
 /// <param name="metadata">Metadata about an Analysis Event.</param>
 /// <param name="hasCorrelatedEvents">Shows there is existing related events available.</param>
 public PartitionAnalysisEvent(
     Guid?eventInstanceId,
     DateTime?timeStamp,
     FabricEventKind?kind,
     PartitionId partitionId,
     AnalysisEventMetadata metadata,
     bool?hasCorrelatedEvents = default(bool?))
     : base(
         eventInstanceId,
         timeStamp,
         Common.FabricEventKind.PartitionAnalysisEvent,
         partitionId,
         hasCorrelatedEvents)
 {
     metadata.ThrowIfNull(nameof(metadata));
     this.Metadata = metadata;
 }