ScanCommand.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using Quadarax.Foundation.Core.QConsole;
  2. using Quadarax.Foundation.Core.QConsole.Argument;
  3. using Quadarax.Foundation.Core.QConsole.Attributes;
  4. using Quadarax.Foundation.Core.Value;
  5. namespace Quadarax.Foundation.Core.QMonitor.Console.Commands
  6. {
  7. [CommandDefinition]
  8. internal class ScanCommand : BaseCommand
  9. {
  10. #region *** Constants ***
  11. private const string CS_CMD_SCAN_NAME = "scan";
  12. private const string CS_CMD_SCAN_DESC = "Scans for general metadata informations.";
  13. protected const string CS_ARG_NAME_DATA = "data";
  14. private const string CS_ARG_HINT_DATA = "<is_data_included>";
  15. private const string CS_ARG_DESC_DATA = "Flag if set shows receiving data entry.";
  16. #endregion
  17. #region *** Properties ***
  18. public override string Name => CS_CMD_SCAN_NAME;
  19. public override string Description => CS_CMD_SCAN_DESC;
  20. private bool IsDataDump { get; set; }
  21. #endregion
  22. #region *** Private fields ***
  23. private IDictionary<string, MonItemGeneral> _cachedGenerals = new Dictionary<string, MonItemGeneral>();
  24. #endregion
  25. #region *** Constructor ***
  26. public ScanCommand(Engine engine) : base(engine)
  27. {
  28. }
  29. #endregion
  30. #region *** Execute ***
  31. protected override Result OnExecute()
  32. {
  33. var waitToData = TimeSpan.FromSeconds(10);
  34. WriteInfo($"Waiting for collecting general metadata {waitToData.TotalSeconds} seconds...");
  35. Task.Delay(waitToData).Wait();
  36. WriteInfo($"Collected {_cachedGenerals.Count} items above.");
  37. return new Result();
  38. }
  39. #endregion
  40. #region *** Private Operations ***
  41. protected override void OnInitialize()
  42. {
  43. base.OnInitialize();
  44. IsDataDump = GetArgumentValueOrDefault<bool>(CS_ARG_NAME_DATA);
  45. }
  46. protected override IEnumerable<AbstractArgument> OnSetupArguments()
  47. {
  48. var result = new List<AbstractArgument>(base.OnSetupArguments())
  49. {
  50. new FlagArgument(CS_ARG_NAME_DATA, CS_ARG_HINT_DATA, CS_ARG_DESC_DATA, false)
  51. };
  52. return result;
  53. }
  54. protected override void OnGeneralReceived(MonGeneral general)
  55. {
  56. foreach (var item in general.Items)
  57. {
  58. if(!_cachedGenerals.ContainsKey($"{general.InstanceIdentifier}_{item.Name}"))
  59. {
  60. _cachedGenerals.Add($"{general.InstanceIdentifier}_{item.Name}", item);
  61. WriteInfo("* [" + general.InstanceIdentifier + "] " + item.Name);
  62. }
  63. }
  64. }
  65. protected override void OnDataReceived(MonData[] data)
  66. {
  67. if (IsDataDump)
  68. {
  69. foreach (var item in data)
  70. {
  71. WriteInfo($"# [{item.InstanceIdentifier}] {item.Name}");
  72. }
  73. }
  74. }
  75. #endregion
  76. }
  77. }