-
-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathClientMetrics.cs
More file actions
167 lines (136 loc) · 5.09 KB
/
ClientMetrics.cs
File metadata and controls
167 lines (136 loc) · 5.09 KB
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
namespace SymbolCollector.Core;
public class ClientMetrics : IClientMetrics
{
private int _filesProcessedCount;
private int _jobsInFlightCount;
private int _failedToUploadCount;
private int _failedToParse;
private int _successfullyUploadCount;
private int _machOFileFoundCount;
private int _elfFileFoundCount;
private int _fatMachOFileFoundCount;
private long _uploadedBytesCount;
private int _fileOrDirectoryUnauthorizedAccessCount;
private int _directoryDoesNotExistCount;
private int _fileDoesNotExistCount;
private int _alreadyExistedCount;
public DateTimeOffset StartedTime { get; } = DateTimeOffset.Now;
public long FilesProcessedCount => _filesProcessedCount;
public long JobsInFlightCount => _jobsInFlightCount;
public long FailedToUploadCount => _failedToUploadCount;
public long FailedToParseCount => _failedToParse;
public long SuccessfullyUploadCount => _successfullyUploadCount;
public long AlreadyExistedCount => _alreadyExistedCount;
public long MachOFileFoundCount => _machOFileFoundCount;
public long ElfFileFoundCount => _elfFileFoundCount;
public int FatMachOFileFoundCount => _fatMachOFileFoundCount;
public long UploadedBytesCount => _uploadedBytesCount;
public int FileOrDirectoryUnauthorizedAccessCount => _fileOrDirectoryUnauthorizedAccessCount;
public int DirectoryDoesNotExistCount => _directoryDoesNotExistCount;
public int FileDoesNotExistCount => _fileDoesNotExistCount;
public virtual void FileProcessed()
{
Interlocked.Increment(ref _filesProcessedCount);
}
public virtual void MachOFileFound()
{
Interlocked.Increment(ref _machOFileFoundCount);
}
public virtual void ElfFileFound()
{
Interlocked.Increment(ref _elfFileFoundCount);
}
public virtual void FatMachOFileFound()
{
Interlocked.Increment(ref _fatMachOFileFoundCount);
}
public virtual void FailedToUpload()
{
Interlocked.Increment(ref _failedToUploadCount);
}
public virtual void FailedToParse()
{
Interlocked.Increment(ref _failedToParse);
}
public virtual void SuccessfulUpload()
{
Interlocked.Increment(ref _successfullyUploadCount);
}
public virtual void AlreadyExisted()
{
Interlocked.Increment(ref _alreadyExistedCount);
}
public virtual void JobsInFlightRemove(int tasksCount)
{
Interlocked.Add(ref _jobsInFlightCount, -tasksCount);
}
public virtual void JobsInFlightAdd(int tasksCount)
{
Interlocked.Add(ref _jobsInFlightCount, tasksCount);
}
public virtual void UploadedBytesAdd(long bytes)
{
Interlocked.Add(ref _uploadedBytesCount, bytes);
}
public virtual void FileOrDirectoryUnauthorizedAccess()
{
Interlocked.Increment(ref _fileOrDirectoryUnauthorizedAccessCount);
}
public virtual void DirectoryDoesNotExist()
{
Interlocked.Increment(ref _directoryDoesNotExistCount);
}
public virtual void FileDoesNotExist()
{
Interlocked.Increment(ref _fileDoesNotExistCount);
}
public TimeSpan RanFor => DateTimeOffset.Now - StartedTime;
public void Write(TextWriter writer)
{
writer.WriteLine();
writer.Write("Started at:\t\t\t\t");
writer.WriteLine(StartedTime);
writer.Write("Ran for:\t\t\t\t");
writer.WriteLine(RanFor);
writer.Write("File Processed:\t\t\t\t");
writer.WriteLine(FilesProcessedCount);
writer.Write("File or Directory Unauthorized\t\t");
writer.WriteLine(FileOrDirectoryUnauthorizedAccessCount);
writer.Write("Directory DoesNotExist:\t\t\t");
writer.WriteLine(DirectoryDoesNotExistCount);
writer.Write("File DoesNotExist:\t\t\t");
writer.WriteLine(FileDoesNotExistCount);
writer.Write("Job in flight:\t\t\t\t");
writer.WriteLine(JobsInFlightCount);
writer.Write("Failed to upload:\t\t\t");
writer.WriteLine(FailedToUploadCount);
writer.Write("Successfully uploaded:\t\t\t");
writer.WriteLine(SuccessfullyUploadCount);
writer.Write("Already existed:\t\t\t");
writer.WriteLine(AlreadyExistedCount);
writer.Write("Uploaded bytes:\t\t\t\t");
writer.WriteLine(UploadedBytesCountHumanReadable());
writer.Write("ELF files loaded:\t\t\t");
writer.WriteLine(ElfFileFoundCount);
writer.Write("Mach-O files loaded:\t\t\t");
writer.WriteLine(MachOFileFoundCount);
writer.Write("Fat Mach-O files loaded:\t\t");
writer.WriteLine(FatMachOFileFoundCount);
}
public string UploadedBytesCountHumanReadable()
{
const int scale = 1024;
var orders = new[] { "GB", "MB", "KB", "Bytes" };
var max = (long)Math.Pow(scale, orders.Length - 1);
var count = UploadedBytesCount;
foreach (var order in orders)
{
if (count > max)
{
return $"{decimal.Divide(count, max):##.##} {order}";
}
max /= scale;
}
return "0 Bytes";
}
}