ApiNodeExtensions.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System.Collections.Generic;
  2. using Sers.Gover.Base;
  3. using Sers.Gover.Base.Model;
  4. using Sers.ServiceCenter.Entity;
  5. namespace Vit.Extensions
  6. {
  7. public static partial class ApiNodeExtensions
  8. {
  9. public static EServiceStationStatus Status_Get(this ApiNode data)
  10. {
  11. return data?.GetDataByConvert<EServiceStationStatus?>("Status")?? EServiceStationStatus.暂停;
  12. }
  13. public static void Status_Set(this ApiNode data, EServiceStationStatus value)
  14. {
  15. data?.SetData("Status", value);
  16. }
  17. public static void Stop(this ApiNode apiNode, ApiLoadBalancingMng apiLoadBalancingMng)
  18. {
  19. if (apiNode.Status_Get() == EServiceStationStatus.暂停)
  20. {
  21. return;
  22. }
  23. apiNode.Status_Set(EServiceStationStatus.暂停);
  24. apiLoadBalancingMng.ApiNode_Remove(apiNode);
  25. }
  26. public static void Start(this ApiNode apiNode, ApiLoadBalancingMng apiLoadBalancingMng)
  27. {
  28. if (apiNode.Status_Get() == EServiceStationStatus.正常)
  29. {
  30. return;
  31. }
  32. apiNode.Status_Set(EServiceStationStatus.正常);
  33. apiLoadBalancingMng.ApiNode_Add(apiNode);
  34. }
  35. #region reason
  36. static void StopReason_Add(this ApiNode data,string reason)
  37. {
  38. var reasons = data.GetData<Dictionary<string,string>>("StopReason");
  39. if (null == reasons)
  40. {
  41. reasons = new Dictionary<string, string>();
  42. data.SetData("StopReason", reasons);
  43. }
  44. reasons.IDictionaryTryAdd(reason, reason);
  45. }
  46. /// <summary>
  47. /// 返回 移除后是否仍有StopReason
  48. /// </summary>
  49. /// <param name="data"></param>
  50. /// <param name="reason"></param>
  51. /// <returns></returns>
  52. static bool StopReason_Remove(this ApiNode data, string reason)
  53. {
  54. var reasons = data.GetData<Dictionary<string, string>>("StopReason");
  55. if (null == reasons) return false;
  56. reasons.Remove(reason);
  57. return reasons.Count != 0;
  58. }
  59. #endregion
  60. public static void StopReason_Add(this ApiNode apiNode, ApiLoadBalancingMng apiLoadBalancingMng,string reason)
  61. {
  62. apiNode.StopReason_Add(reason);
  63. apiNode.Stop(apiLoadBalancingMng);
  64. }
  65. public static void StopReason_Remove(this ApiNode apiNode, ApiLoadBalancingMng apiLoadBalancingMng, string reason)
  66. {
  67. if (!apiNode.StopReason_Remove(reason))
  68. {
  69. apiNode.Start(apiLoadBalancingMng);
  70. }
  71. }
  72. }
  73. }