speedo.tin 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2022 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. #var lib_speedo[META] {
  8. {NAME} {测速仪}
  9. {DESC} {为各种数据提供测速支持,气血/精神/经验值/存款都可以}
  10. {AUTHOR} {担子炮}
  11. };
  12. #func {lib_speedo.Init} {
  13. #var gSpeedo {};
  14. #return {true};
  15. };
  16. #alias {speedo.Add} {
  17. #local key {%1};
  18. #local value {@defaultInt{%2;0}};
  19. #local monotone {@default{%3;false}};
  20. #local keepalive {@defaultInt{%4;60}};
  21. #if { @isEmpty{$key} } {
  22. #return;
  23. };
  24. #math value {$value + @speedo.Get{{$key}}};
  25. speedo.Set {$key} {$value} {$monotone} {$keepalive};
  26. };
  27. #alias {speedo.Set} {
  28. #local key {%1};
  29. #local value {@defaultInt{%2;0}};
  30. #local monotone {@default{%3;false}};
  31. #local keepalive {@defaultInt{%4;60}};
  32. #if { @isEmpty{$key} } {
  33. #return;
  34. };
  35. #format {now} {%T};
  36. #if { "$gSpeedo[$key]" == "" } {
  37. #var {gSpeedo[$key][base]} {$value};
  38. #var {gSpeedo[$key][baseTime]} {$now};
  39. #var {gSpeedo[$key][deduction]} {0};
  40. #var {gSpeedo[$key][paused]} {false};
  41. };
  42. #nop 只允许单调递增或者单调递减;
  43. #if { "$monotone" == "true" } {
  44. #if { ( $value > $gSpeedo[$key][value] && $gSpeedo[$key][value] < $gSpeedo[$key][base] )
  45. || ( $value < $gSpeedo[$key][value] && $gSpeedo[$key][value] > $gSpeedo[$key][base] ) } {
  46. #var {gSpeedo[$key][base]} {$gSpeedo[$key][value]};
  47. #var {gSpeedo[$key][baseTime]} {$gSpeedo[$key][update]};
  48. #var {gSpeedo[$key][deduction]} {0};
  49. };
  50. };
  51. #local interval {0};
  52. #math interval {$now - $gSpeedo[$key][update]};
  53. #nop Set 会导致继续统计,但之前暂停时经过的时间将被扣除;
  54. #nop 超过 keepalive 的间隔也会被扣除;
  55. #if { "$gSpeedo[$key][paused]" == "true" || $interval > $keepalive } {
  56. #var {gSpeedo[$key][paused]} {false};
  57. #math {gSpeedo[$key][deduction]} {$gSpeedo[$key][deduction] + $interval - $keepalive};
  58. };
  59. #var {gSpeedo[$key][value]} {$value};
  60. #var {gSpeedo[$key][update]} {$now};
  61. };
  62. #func {speedo.Get} {
  63. #local key {%1};
  64. #if { @isEmpty{$key} } {
  65. #return {0};
  66. };
  67. #if { "$gSpeedo[$key]" == "" } {
  68. #return {0};
  69. };
  70. #return {$gSpeedo[$key][value]};
  71. };
  72. #alias {speedo.GetUpdateTime} {
  73. #local key {%1};
  74. #return {$gSpeedo[$key][update]};
  75. };
  76. #func {speedo.GetSpeed} {
  77. #local key {%1};
  78. #local interval {%2};
  79. #local speedInfo {@speedo.GetSpeedInfo{{$key};{$interval}}};
  80. #if { "$speedInfo" == "" } {
  81. #return {0};
  82. };
  83. #return {$speedInfo[speed]};
  84. };
  85. #func {speedo.GetSpeedInfo} {
  86. #local key {%1};
  87. #local interval {@defaultInt{%2;1}};
  88. #if { @isEmpty{$key} } {
  89. #return {};
  90. };
  91. #local data {$gSpeedo[$key]};
  92. #if { "$data" == "" } {
  93. #return {};
  94. };
  95. #local delta {0};
  96. #math delta {$data[value] - $data[base]};
  97. #local speed {0};
  98. #math speed {
  99. ( $delta * $interval )
  100. / ( $data[update] - $data[baseTime] - $data[deduction] )
  101. };
  102. #return {
  103. {begin} {$data[baseTime]}
  104. {end} {$data[update]}
  105. {delta} {$delta}
  106. {speed} {$speed}
  107. {deduction} {$data[deduction]}
  108. };
  109. };
  110. #alias {speedo.Pause} {
  111. #local key {%1};
  112. #var {gSpeedo[$key][paused]} {true};
  113. };
  114. #alias {speedo.Resume} {
  115. #local key {%1};
  116. #if { "$gSpeedo[$key][paused]" == "true" } {
  117. #var {gSpeedo[$key][paused]} {false};
  118. #math {gSpeedo[$key][deduction]} {$gSpeedo[$key][deduction] + $now - $gSpeedo[$key][update]};
  119. #format {now} {%T};
  120. #var {gSpeedo[$key][update]} {$now};
  121. };
  122. };
  123. #alias {speedo.Reset} {
  124. #local key {%1};
  125. #if { "$gSpeedo[$key]" == "" } {
  126. #return;
  127. };
  128. #format {now} {%T};
  129. #var {gSpeedo[$key][base]} {0};
  130. #var {gSpeedo[$key][baseTime]} {$now};
  131. #var {gSpeedo[$key][deduction]} {0};
  132. #var {gSpeedo[$key][paused]} {false};
  133. #var {gSpeedo[$key][value]} {0};
  134. #var {gSpeedo[$key][update]} {$now};
  135. };
  136. #alias {speedo.List} {
  137. #local interval {@defaultInt{%1;1}};
  138. #local pattern {@default{%2;{%*}}};
  139. #echo {<128> %-14s %+10s %+10s %+14s %-20s %-20s %+10s} {统计对象} {统计结果} {平均值} {测算周期(秒)} {样本开始时间} {样本截止时间} {发呆时间};
  140. #draw Yellow scroll line 1 1 1 110;
  141. #local key {};
  142. #foreach {*gSpeedo[]} {key} {
  143. #if { "$key" != "$pattern" } {
  144. #continue;
  145. };
  146. #local speedInfo {@speedo.GetSpeedInfo{{$key};{$interval}}};
  147. #echo {<168> %-14s %+10s %+10s %+14s %t %t %+10s}
  148. {$key} {$speedInfo[delta]} {$speedInfo[speed]} {$interval}
  149. {{%Y-%m-%d %H:%M:%S}{$speedInfo[begin]}}
  150. {{%Y-%m-%d %H:%M:%S}{$speedInfo[end]}}
  151. {$speedInfo[deduction]};
  152. };
  153. };