-
Notifications
You must be signed in to change notification settings - Fork 10
/
MetaData.cs
61 lines (52 loc) · 1.95 KB
/
MetaData.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
using System.Collections.Generic;
using System.Linq;
using Amazon.CloudWatch.EMF.Serializer;
using Newtonsoft.Json;
namespace Amazon.CloudWatch.EMF.Model
{
/// <summary>
/// Represents the CloudWatch Metrics Metadata appended to the CloudWatch log
/// and used by CloudWatch to parse metrics out of the log's properties.
/// </summary>
public class MetaData
{
public MetaData()
{
CloudWatchMetrics = new List<MetricDirective>() { new MetricDirective() };
Timestamp = DateTime.Now;
CustomMetadata = new Dictionary<string, object>();
}
/*internal bool IsEmpty()
{
return !MetricDirective.HasNoMetrics();
}*/
[JsonProperty]
[JsonConverter(typeof(UnixMillisecondDateTimeConverter))]
internal DateTime Timestamp { get; set; }
/// <summary>
/// Represents the MetricDirective.
/// NOTE: serialization emits an Array, but only a single MetricDirective is supported by this library.
/// </summary>
[JsonProperty]
internal List<MetricDirective> CloudWatchMetrics { get; set; }
[JsonExtensionData]
internal Dictionary<string, object> CustomMetadata { get; } = new Dictionary<string, object>();
internal MetricDirective MetricDirective => CloudWatchMetrics.First();
internal MetaData DeepCloneWithNewMetrics(List<MetricDefinition> metrics)
{
var clone = new MetaData();
clone.CloudWatchMetrics = new List<MetricDirective>();
foreach (var metric in CloudWatchMetrics)
{
clone.CloudWatchMetrics.Add(metric.DeepCloneWithNewMetrics(metrics));
}
foreach (var metadata in CustomMetadata)
{
clone.CustomMetadata.Add(metadata.Key, metadata.Value);
}
clone.Timestamp = Timestamp;
return clone;
}
}
}