Skip to content

Commit 9e44f46

Browse files
committed
add PluginGraphAttributesBuilder.WithCategory(WellKnownCategory)
1 parent d7f75d1 commit 9e44f46

File tree

3 files changed

+118
-2
lines changed

3 files changed

+118
-2
lines changed

src/Smdn.Net.MuninNode/Smdn.Net.MuninPlugin/PluginGraphAttributesBuilder.cs

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,63 @@ public PluginGraphAttributesBuilder WithUpdateRate(TimeSpan updateRate)
287287
*/
288288

289289
/// <summary>Sets a value for the <c>graph_category</c> to <c>other</c>.</summary>
290-
/// <seealso cref="WithCategory"/>
290+
/// <seealso cref="WithCategory(string)"/>
291+
/// <seealso cref="WithCategory(WellKnownCategory)"/>
291292
public PluginGraphAttributesBuilder WithCategoryOther()
292-
=> WithCategory("other");
293+
=> WithCategory(WellKnownCategory.Other);
294+
295+
/// <summary>Sets a value for the <c>graph_category</c>.</summary>
296+
/// <seealso cref="WithCategory(string)"/>
297+
public PluginGraphAttributesBuilder WithCategory(WellKnownCategory category)
298+
=> WithCategory(TranslateWellKnownCategory(category));
299+
300+
private static string TranslateWellKnownCategory(WellKnownCategory category)
301+
=> category switch {
302+
WellKnownCategory.OneSec => "1sec",
303+
WellKnownCategory.AntiVirus => "antivirus",
304+
WellKnownCategory.ApplicationServer => "appserver",
305+
WellKnownCategory.AuthenticationServer => "auth",
306+
WellKnownCategory.Backup => "backup",
307+
WellKnownCategory.MessagingServer => "chat",
308+
WellKnownCategory.Cloud => "cloud",
309+
WellKnownCategory.ContentManagementSystem => "cms",
310+
WellKnownCategory.Cpu => "cpu",
311+
WellKnownCategory.DatabaseServer => "db",
312+
WellKnownCategory.DevelopmentTool => "devel",
313+
WellKnownCategory.Disk => "disk",
314+
WellKnownCategory.Dns => "dns",
315+
WellKnownCategory.FileTransfer => "filetransfer",
316+
WellKnownCategory.Forum => "forum",
317+
WellKnownCategory.FileSystem => "fs",
318+
WellKnownCategory.NetworkFiltering => "fw",
319+
WellKnownCategory.GameServer => "games",
320+
WellKnownCategory.HighThroughputComputing => "htc",
321+
WellKnownCategory.LoadBalancer => "loadbalancer",
322+
WellKnownCategory.Mail => "mail",
323+
WellKnownCategory.MailingList => "mailinglist",
324+
WellKnownCategory.Memory => "memory",
325+
WellKnownCategory.Munin => "munin",
326+
WellKnownCategory.Network => "network",
327+
WellKnownCategory.Other => "other",
328+
WellKnownCategory.Printing => "printing",
329+
WellKnownCategory.Process => "processes",
330+
WellKnownCategory.Radio => "radio",
331+
WellKnownCategory.StorageAreaNetwork => "san",
332+
WellKnownCategory.Search => "search",
333+
WellKnownCategory.Security => "security",
334+
WellKnownCategory.Sensor => "sensors",
335+
WellKnownCategory.SpamFilter => "spamfilter",
336+
WellKnownCategory.Streaming => "streaming",
337+
WellKnownCategory.System => "system",
338+
WellKnownCategory.TimeSynchronization => "time",
339+
WellKnownCategory.Video => "tv",
340+
WellKnownCategory.Virtualization => "virtualization",
341+
WellKnownCategory.VoIP => "voip",
342+
WellKnownCategory.WebServer => "webserver",
343+
WellKnownCategory.Wiki => "wiki",
344+
WellKnownCategory.Wireless => "wireless",
345+
_ => throw new ArgumentException("not a well known category", paramName: nameof(category)),
346+
};
293347

294348
/// <summary>Sets a value for the <c>graph_width</c> and <c>graph_height</c>.</summary>
295349
/// <seealso cref="WithWidth"/>

src/Smdn.Net.MuninNode/Smdn.Net.MuninPlugin/WellKnownCategory.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace Smdn.Net.MuninPlugin;
99
/// Categories are used by Munin master to classify plugin graphs.
1010
/// </summary>
1111
/// <seealso cref="PluginGraphAttributes.Category"/>
12+
/// <seealso cref="PluginGraphAttributesBuilder.WithCategory(WellKnownCategory)"/>
1213
/// <seealso href="https://guide.munin-monitoring.org/en/latest/reference/graph-category.html">Plugin graph categories</seealso>
1314
/// <seealso href="https://guide.munin-monitoring.org/en/latest/reference/graph-category.html#well-known-categories">Well known categories</seealso>
1415
public enum WellKnownCategory {

tests/Smdn.Net.MuninNode/Smdn.Net.MuninPlugin/PluginGraphAttributesBuilder.cs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,67 @@ public void WithCategoryOther()
383383
["graph_title title", $"graph_category other"]
384384
);
385385

386+
private static System.Collections.IEnumerable YieldTestCases_WithCategory_WellKnownCategory()
387+
{
388+
foreach (var testCase in new[] {
389+
new { Category = WellKnownCategory.OneSec, StringRepresentation = "1sec" },
390+
new { Category = WellKnownCategory.AntiVirus, StringRepresentation = "antivirus" },
391+
new { Category = WellKnownCategory.ApplicationServer, StringRepresentation = "appserver" },
392+
new { Category = WellKnownCategory.AuthenticationServer, StringRepresentation = "auth" },
393+
new { Category = WellKnownCategory.Backup, StringRepresentation = "backup" },
394+
new { Category = WellKnownCategory.MessagingServer, StringRepresentation = "chat" },
395+
new { Category = WellKnownCategory.Cloud, StringRepresentation = "cloud" },
396+
new { Category = WellKnownCategory.ContentManagementSystem, StringRepresentation = "cms" },
397+
new { Category = WellKnownCategory.Cpu, StringRepresentation = "cpu" },
398+
new { Category = WellKnownCategory.DatabaseServer, StringRepresentation = "db" },
399+
new { Category = WellKnownCategory.DevelopmentTool, StringRepresentation = "devel" },
400+
new { Category = WellKnownCategory.Disk, StringRepresentation = "disk" },
401+
new { Category = WellKnownCategory.Dns, StringRepresentation = "dns" },
402+
new { Category = WellKnownCategory.FileTransfer, StringRepresentation = "filetransfer" },
403+
new { Category = WellKnownCategory.Forum, StringRepresentation = "forum" },
404+
new { Category = WellKnownCategory.FileSystem, StringRepresentation = "fs" },
405+
new { Category = WellKnownCategory.NetworkFiltering, StringRepresentation = "fw" },
406+
new { Category = WellKnownCategory.GameServer, StringRepresentation = "games" },
407+
new { Category = WellKnownCategory.HighThroughputComputing, StringRepresentation = "htc" },
408+
new { Category = WellKnownCategory.LoadBalancer, StringRepresentation = "loadbalancer" },
409+
new { Category = WellKnownCategory.Mail, StringRepresentation = "mail" },
410+
new { Category = WellKnownCategory.MailingList, StringRepresentation = "mailinglist" },
411+
new { Category = WellKnownCategory.Memory, StringRepresentation = "memory" },
412+
new { Category = WellKnownCategory.Munin, StringRepresentation = "munin" },
413+
new { Category = WellKnownCategory.Network, StringRepresentation = "network" },
414+
new { Category = WellKnownCategory.Other, StringRepresentation = "other" },
415+
new { Category = WellKnownCategory.Printing, StringRepresentation = "printing" },
416+
new { Category = WellKnownCategory.Process, StringRepresentation = "processes" },
417+
new { Category = WellKnownCategory.Radio, StringRepresentation = "radio" },
418+
new { Category = WellKnownCategory.StorageAreaNetwork, StringRepresentation = "san" },
419+
new { Category = WellKnownCategory.Search, StringRepresentation = "search" },
420+
new { Category = WellKnownCategory.Security, StringRepresentation = "security" },
421+
new { Category = WellKnownCategory.Sensor, StringRepresentation = "sensors" },
422+
new { Category = WellKnownCategory.SpamFilter, StringRepresentation = "spamfilter" },
423+
new { Category = WellKnownCategory.Streaming, StringRepresentation = "streaming" },
424+
new { Category = WellKnownCategory.System, StringRepresentation = "system" },
425+
new { Category = WellKnownCategory.TimeSynchronization, StringRepresentation = "time" },
426+
new { Category = WellKnownCategory.Video, StringRepresentation = "tv" },
427+
new { Category = WellKnownCategory.Virtualization, StringRepresentation = "virtualization" },
428+
new { Category = WellKnownCategory.VoIP, StringRepresentation = "voip" },
429+
new { Category = WellKnownCategory.WebServer, StringRepresentation = "webserver" },
430+
new { Category = WellKnownCategory.Wiki, StringRepresentation = "wiki" },
431+
new { Category = WellKnownCategory.Wireless, StringRepresentation = "wireless" },
432+
}) {
433+
yield return new object[] { testCase.Category, $"graph_category {testCase.StringRepresentation}" };
434+
}
435+
}
436+
437+
[TestCaseSource(nameof(YieldTestCases_WithCategory_WellKnownCategory))]
438+
public void WithCategory_WellKnownCategory(
439+
WellKnownCategory category,
440+
string expectedGraphCategoryAttribute
441+
)
442+
=> AssertBuiltGraphAttributes(
443+
new PluginGraphAttributesBuilder("title").WithCategory(category),
444+
["graph_title title", expectedGraphCategoryAttribute]
445+
);
446+
386447
[TestCase(-1, -1, "width")]
387448
[TestCase(-1, 0, "width")]
388449
[TestCase(0, -1, "width")]

0 commit comments

Comments
 (0)