ScanCommand.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using Quadarax.Foundation.Core.QConsole;
  2. using Quadarax.Foundation.Core.QConsole.Attributes;
  3. using Quadarax.Foundation.Core.Value;
  4. namespace Quadarax.Foundation.Core.QMonitor.Console.Commands
  5. {
  6. [CommandDefinition]
  7. internal class ScanCommand : BaseCommand
  8. {
  9. #region *** Constants ***
  10. private const string CS_CMD_SCAN_NAME = "scan";
  11. private const string CS_CMD_SCAN_DESC = "Scans for general metadata informations.";
  12. #endregion
  13. #region *** Properties ***
  14. public override string Name => CS_CMD_SCAN_NAME;
  15. public override string Description => CS_CMD_SCAN_DESC;
  16. #endregion
  17. #region *** Private fields ***
  18. private IDictionary<string, MonItemGeneral> _cachedGenerals = new Dictionary<string, MonItemGeneral>();
  19. #endregion
  20. #region *** Constructor ***
  21. public ScanCommand(Engine engine) : base(engine)
  22. {
  23. }
  24. #endregion
  25. #region *** Execute ***
  26. protected override Result OnExecute()
  27. {
  28. var waitToData = TimeSpan.FromSeconds(10);
  29. WriteInfo($"Waiting for collecting general metadata {waitToData.TotalSeconds} seconds...");
  30. Task.Delay(waitToData).Wait();
  31. WriteInfo($"Collected {_cachedGenerals.Count} items above.");
  32. return new Result();
  33. }
  34. #endregion
  35. #region *** Private Operations ***
  36. protected override void OnGeneralReceived(MonGeneral general)
  37. {
  38. foreach (var item in general.Items)
  39. {
  40. if(!_cachedGenerals.ContainsKey($"{general.InstanceIdentifier}_{item.Name}"))
  41. {
  42. _cachedGenerals.Add($"{general.InstanceIdentifier}_{item.Name}", item);
  43. WriteInfo("[" + general.InstanceIdentifier + "] " + item.Name);
  44. }
  45. }
  46. }
  47. #endregion
  48. }
  49. }