zold 0.31.10 → 0.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +11 -27
  3. data/Gemfile +21 -33
  4. data/Gemfile.lock +181 -126
  5. data/Guardfile +0 -0
  6. data/INSTALL.md +80 -59
  7. data/LICENSE.txt +1 -1
  8. data/LICENSES/MIT.txt +21 -0
  9. data/README.md +183 -154
  10. data/REUSE.toml +40 -0
  11. data/Rakefile +4 -38
  12. data/bin/zold +7 -37
  13. data/deploy.sh +4 -22
  14. data/lib/zold/age.rb +3 -20
  15. data/lib/zold/amount.rb +3 -20
  16. data/lib/zold/cached_wallets.rb +3 -20
  17. data/lib/zold/commands/alias.rb +4 -21
  18. data/lib/zold/commands/args.rb +4 -21
  19. data/lib/zold/commands/calculate.rb +5 -22
  20. data/lib/zold/commands/clean.rb +6 -23
  21. data/lib/zold/commands/create.rb +5 -22
  22. data/lib/zold/commands/diff.rb +5 -22
  23. data/lib/zold/commands/fetch.rb +6 -23
  24. data/lib/zold/commands/invoice.rb +5 -22
  25. data/lib/zold/commands/list.rb +5 -22
  26. data/lib/zold/commands/merge.rb +7 -24
  27. data/lib/zold/commands/next.rb +5 -22
  28. data/lib/zold/commands/node.rb +4 -21
  29. data/lib/zold/commands/pay.rb +6 -23
  30. data/lib/zold/commands/propagate.rb +5 -22
  31. data/lib/zold/commands/pull.rb +5 -22
  32. data/lib/zold/commands/push.rb +5 -22
  33. data/lib/zold/commands/remote.rb +7 -24
  34. data/lib/zold/commands/remove.rb +5 -22
  35. data/lib/zold/commands/routines/audit.rb +4 -21
  36. data/lib/zold/commands/routines/gc.rb +6 -23
  37. data/lib/zold/commands/routines/reconcile.rb +5 -22
  38. data/lib/zold/commands/routines/reconnect.rb +4 -21
  39. data/lib/zold/commands/routines/retire.rb +4 -21
  40. data/lib/zold/commands/routines/spread.rb +5 -22
  41. data/lib/zold/commands/routines.rb +3 -20
  42. data/lib/zold/commands/show.rb +5 -22
  43. data/lib/zold/commands/taxes.rb +5 -22
  44. data/lib/zold/commands/thread_badge.rb +3 -20
  45. data/lib/zold/copies.rb +6 -25
  46. data/lib/zold/dir_items.rb +3 -20
  47. data/lib/zold/endless.rb +5 -22
  48. data/lib/zold/gem.rb +3 -20
  49. data/lib/zold/hands.rb +6 -23
  50. data/lib/zold/head.rb +4 -21
  51. data/lib/zold/hexnum.rb +3 -20
  52. data/lib/zold/http.rb +3 -20
  53. data/lib/zold/hungry_wallets.rb +6 -23
  54. data/lib/zold/id.rb +3 -20
  55. data/lib/zold/json_page.rb +5 -22
  56. data/lib/zold/key.rb +3 -20
  57. data/lib/zold/metronome.rb +5 -22
  58. data/lib/zold/node/async_entrance.rb +6 -23
  59. data/lib/zold/node/entrance.rb +7 -24
  60. data/lib/zold/node/farm.rb +5 -22
  61. data/lib/zold/node/farmers.rb +15 -32
  62. data/lib/zold/node/front.rb +6 -23
  63. data/lib/zold/node/journaled_pipeline.rb +8 -25
  64. data/lib/zold/node/nodup_entrance.rb +6 -23
  65. data/lib/zold/node/nospam_entrance.rb +6 -23
  66. data/lib/zold/node/pipeline.rb +6 -23
  67. data/lib/zold/node/safe_entrance.rb +4 -22
  68. data/lib/zold/node/soft_error.rb +3 -20
  69. data/lib/zold/node/spread_entrance.rb +5 -22
  70. data/lib/zold/node/sync_entrance.rb +5 -22
  71. data/lib/zold/node/trace.rb +3 -20
  72. data/lib/zold/patch.rb +6 -23
  73. data/lib/zold/prefixes.rb +3 -20
  74. data/lib/zold/remotes.rb +5 -22
  75. data/lib/zold/signature.rb +3 -20
  76. data/lib/zold/size.rb +3 -20
  77. data/lib/zold/sync_wallets.rb +5 -22
  78. data/lib/zold/tax.rb +4 -21
  79. data/lib/zold/thread_pool.rb +4 -21
  80. data/lib/zold/tree_wallets.rb +3 -20
  81. data/lib/zold/txn.rb +4 -21
  82. data/lib/zold/txns.rb +4 -21
  83. data/lib/zold/upgrades.rb +4 -21
  84. data/lib/zold/verbose_thread.rb +5 -22
  85. data/lib/zold/version.rb +4 -21
  86. data/lib/zold/version_file.rb +4 -21
  87. data/lib/zold/wallet.rb +6 -23
  88. data/lib/zold/wallets.rb +5 -23
  89. data/lib/zold.rb +3 -21
  90. data/resources/banned-wallets.log +6 -6
  91. data/upgrades/2.rb +3 -20
  92. data/upgrades/delete_banned_wallets.rb +3 -20
  93. data/upgrades/move_wallets_into_tree.rb +3 -20
  94. data/upgrades/protocol_up.rb +3 -20
  95. data/upgrades/rename_foreign_wallets.rb +3 -20
  96. data/views/journal.haml +25 -0
  97. data/views/layout.haml +25 -0
  98. data/views/wallet.haml +25 -0
  99. data/zold.gemspec +6 -22
  100. metadata +26 -174
  101. data/.0pdd.yml +0 -29
  102. data/.gitattributes +0 -9
  103. data/.github/workflows/actionlint.yml +0 -41
  104. data/.github/workflows/codecov.yml +0 -40
  105. data/.github/workflows/copyrights.yml +0 -30
  106. data/.github/workflows/pdd.yml +0 -34
  107. data/.github/workflows/rake.yml +0 -45
  108. data/.github/workflows/xcop.yml +0 -30
  109. data/.github/workflows/yamllint.yml +0 -34
  110. data/.gitignore +0 -12
  111. data/.pdd +0 -7
  112. data/.rubocop.yml +0 -70
  113. data/.ruby-version +0 -1
  114. data/.rultor.yml +0 -57
  115. data/.simplecov +0 -36
  116. data/cucumber.yml +0 -23
  117. data/features/cli.feature +0 -16
  118. data/features/gem_package.feature +0 -26
  119. data/features/step_definitions/steps.rb +0 -84
  120. data/features/support/env.rb +0 -26
  121. data/fixtures/448b451bc62e8e16.z +0 -1005
  122. data/fixtures/id_rsa +0 -51
  123. data/fixtures/id_rsa-2 +0 -51
  124. data/fixtures/id_rsa-2.pub +0 -1
  125. data/fixtures/id_rsa.pub +0 -1
  126. data/fixtures/keys/1.pub +0 -1
  127. data/fixtures/keys/2 +0 -51
  128. data/fixtures/keys/2.pub +0 -1
  129. data/fixtures/merge/asserts.rb +0 -36
  130. data/fixtures/merge/id_rsa +0 -51
  131. data/fixtures/merge/id_rsa.pub +0 -1
  132. data/fixtures/merge/into_no_wallet/assert.rb +0 -25
  133. data/fixtures/merge/into_no_wallet/copies/0123456789abcdef/1.zc +0 -6
  134. data/fixtures/merge/into_no_wallet/copies/0123456789abcdef/scores.zc +0 -1
  135. data/fixtures/merge/into_no_wallet/opts +0 -1
  136. data/fixtures/merge/legacy_negatives_stay/0123456789abcdef.z +0 -6
  137. data/fixtures/merge/legacy_negatives_stay/assert.rb +0 -25
  138. data/fixtures/merge/legacy_negatives_stay/copies/0123456789abcdef/1.zc +0 -6
  139. data/fixtures/merge/legacy_negatives_stay/copies/0123456789abcdef/scores.zc +0 -1
  140. data/fixtures/merge/legacy_negatives_stay/opts +0 -2
  141. data/fixtures/merge/missed_wallets/0000000000000000.z +0 -6
  142. data/fixtures/merge/missed_wallets/0123456789abcdef.z +0 -6
  143. data/fixtures/merge/missed_wallets/assert.rb +0 -25
  144. data/fixtures/merge/missed_wallets/copies/0123456789abcdef/1.zc +0 -8
  145. data/fixtures/merge/missed_wallets/copies/0123456789abcdef/scores.zc +0 -1
  146. data/fixtures/merge/missed_wallets/opts +0 -3
  147. data/fixtures/merge/negative_overwriting/0123456789abcdef.z +0 -6
  148. data/fixtures/merge/negative_overwriting/146b852f2d9ad984.z +0 -6
  149. data/fixtures/merge/negative_overwriting/assert.rb +0 -25
  150. data/fixtures/merge/negative_overwriting/copies/0123456789abcdef/1.zc +0 -6
  151. data/fixtures/merge/negative_overwriting/copies/0123456789abcdef/scores.zc +0 -1
  152. data/fixtures/merge/negative_overwriting/opts +0 -2
  153. data/fixtures/merge/negatives_in_between/0000000000000000.z +0 -6
  154. data/fixtures/merge/negatives_in_between/0123456789abcdef.z +0 -5
  155. data/fixtures/merge/negatives_in_between/assert.rb +0 -25
  156. data/fixtures/merge/negatives_in_between/copies/0123456789abcdef/1.zc +0 -6
  157. data/fixtures/merge/negatives_in_between/copies/0123456789abcdef/2.zc +0 -7
  158. data/fixtures/merge/negatives_in_between/copies/0123456789abcdef/3.zc +0 -6
  159. data/fixtures/merge/negatives_in_between/copies/0123456789abcdef/scores.zc +0 -3
  160. data/fixtures/merge/negatives_in_between/opts +0 -1
  161. data/fixtures/merge/random_expenses/0000000000000000.z +0 -6
  162. data/fixtures/merge/random_expenses/0123456789abcdef.z +0 -6
  163. data/fixtures/merge/random_expenses/assert.rb +0 -25
  164. data/fixtures/merge/random_expenses/copies/0123456789abcdef/1.zc +0 -7
  165. data/fixtures/merge/random_expenses/copies/0123456789abcdef/2.zc +0 -7
  166. data/fixtures/merge/random_expenses/copies/0123456789abcdef/3.zc +0 -7
  167. data/fixtures/merge/random_expenses/copies/0123456789abcdef/4.zc +0 -7
  168. data/fixtures/merge/random_expenses/copies/0123456789abcdef/5.zc +0 -7
  169. data/fixtures/merge/random_expenses/copies/0123456789abcdef/scores.zc +0 -5
  170. data/fixtures/merge/random_expenses/opts +0 -1
  171. data/fixtures/merge/simple_case/0000000000000000.z +0 -6
  172. data/fixtures/merge/simple_case/0123456789abcdef.z +0 -4
  173. data/fixtures/merge/simple_case/assert.rb +0 -25
  174. data/fixtures/merge/simple_case/copies/0123456789abcdef/1.zc +0 -6
  175. data/fixtures/merge/simple_case/copies/0123456789abcdef/scores.zc +0 -1
  176. data/fixtures/merge/simple_case/opts +0 -1
  177. data/fixtures/merge/unconfirmed_income/0123456789abcdef.z +0 -4
  178. data/fixtures/merge/unconfirmed_income/assert.rb +0 -25
  179. data/fixtures/merge/unconfirmed_income/copies/0123456789abcdef/1.zc +0 -6
  180. data/fixtures/merge/unconfirmed_income/copies/0123456789abcdef/scores.zc +0 -1
  181. data/fixtures/merge/unconfirmed_income/opts +0 -3
  182. data/fixtures/scripts/_head.sh +0 -89
  183. data/fixtures/scripts/calculate-scores.sh +0 -22
  184. data/fixtures/scripts/distribute-wallet.sh +0 -105
  185. data/fixtures/scripts/print-helps.sh +0 -27
  186. data/fixtures/scripts/pull-on-start.sh +0 -52
  187. data/fixtures/scripts/push-and-pull.sh +0 -63
  188. data/fixtures/scripts/redeploy-on-upgrade.sh +0 -56
  189. data/fixtures/scripts/spread-wallets.sh +0 -72
  190. data/lib/zold/log.rb +0 -139
  191. data/renovate.json +0 -6
  192. data/test/commands/routines/test_audit.rb +0 -41
  193. data/test/commands/routines/test_gc.rb +0 -70
  194. data/test/commands/routines/test_reconcile.rb +0 -51
  195. data/test/commands/routines/test_reconnect.rb +0 -46
  196. data/test/commands/routines/test_retire.rb +0 -40
  197. data/test/commands/test_alias.rb +0 -76
  198. data/test/commands/test_calculate.rb +0 -40
  199. data/test/commands/test_clean.rb +0 -73
  200. data/test/commands/test_create.rb +0 -50
  201. data/test/commands/test_diff.rb +0 -61
  202. data/test/commands/test_fetch.rb +0 -162
  203. data/test/commands/test_invoice.rb +0 -50
  204. data/test/commands/test_list.rb +0 -47
  205. data/test/commands/test_merge.rb +0 -129
  206. data/test/commands/test_node.rb +0 -68
  207. data/test/commands/test_pay.rb +0 -221
  208. data/test/commands/test_propagate.rb +0 -51
  209. data/test/commands/test_pull.rb +0 -70
  210. data/test/commands/test_push.rb +0 -93
  211. data/test/commands/test_remote.rb +0 -265
  212. data/test/commands/test_remove.rb +0 -66
  213. data/test/commands/test_show.rb +0 -48
  214. data/test/commands/test_taxes.rb +0 -76
  215. data/test/fake_home.rb +0 -104
  216. data/test/node/fake_entrance.rb +0 -43
  217. data/test/node/fake_node.rb +0 -105
  218. data/test/node/test_async_entrance.rb +0 -103
  219. data/test/node/test_entrance.rb +0 -82
  220. data/test/node/test_farm.rb +0 -177
  221. data/test/node/test_farmers.rb +0 -76
  222. data/test/node/test_front.rb +0 -399
  223. data/test/node/test_nodup_entrance.rb +0 -49
  224. data/test/node/test_nospam_entrance.rb +0 -49
  225. data/test/node/test_safe_entrance.rb +0 -59
  226. data/test/node/test_spread_entrance.rb +0 -67
  227. data/test/node/test_sync_entrance.rb +0 -41
  228. data/test/node/test_trace.rb +0 -36
  229. data/test/test__helper.rb +0 -112
  230. data/test/test_age.rb +0 -55
  231. data/test/test_amount.rb +0 -81
  232. data/test/test_cached_wallets.rb +0 -73
  233. data/test/test_copies.rb +0 -145
  234. data/test/test_dir_items.rb +0 -90
  235. data/test/test_gem.rb +0 -41
  236. data/test/test_hands.rb +0 -69
  237. data/test/test_hexnum.rb +0 -36
  238. data/test/test_http.rb +0 -225
  239. data/test/test_hungry_wallets.rb +0 -90
  240. data/test/test_id.rb +0 -79
  241. data/test/test_json_page.rb +0 -47
  242. data/test/test_key.rb +0 -99
  243. data/test/test_log.rb +0 -49
  244. data/test/test_metronome.rb +0 -89
  245. data/test/test_patch.rb +0 -178
  246. data/test/test_prefixes.rb +0 -49
  247. data/test/test_remotes.rb +0 -319
  248. data/test/test_signature.rb +0 -49
  249. data/test/test_size.rb +0 -39
  250. data/test/test_sync_wallets.rb +0 -57
  251. data/test/test_tax.rb +0 -171
  252. data/test/test_thread_pool.rb +0 -89
  253. data/test/test_tree_wallets.rb +0 -83
  254. data/test/test_txn.rb +0 -89
  255. data/test/test_upgrades.rb +0 -99
  256. data/test/test_verbose_thread.rb +0 -55
  257. data/test/test_version.rb +0 -35
  258. data/test/test_wallet.rb +0 -318
  259. data/test/test_wallets.rb +0 -85
  260. data/test/test_zold.rb +0 -99
  261. data/test/upgrades/test_delete_banned_wallets.rb +0 -47
  262. data/test/upgrades/test_protocol_up.rb +0 -42
data/lib/zold/http.rb CHANGED
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'rainbow'
24
7
  require 'uri'
@@ -29,7 +12,7 @@ require_relative 'version'
29
12
 
30
13
  # HTTP page.
31
14
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
15
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
33
16
  # License:: MIT
34
17
  module Zold
35
18
  # Some clients waits for status method in response
@@ -1,29 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'delegate'
24
7
  require 'zache'
25
8
  require 'shellwords'
26
- require_relative 'log'
9
+ require 'loog'
27
10
  require_relative 'thread_pool'
28
11
  require_relative 'commands/pull'
29
12
  require_relative 'commands/fetch'
@@ -31,13 +14,13 @@ require_relative 'commands/fetch'
31
14
  # Wallets that PULL what's missing, in the background.
32
15
  #
33
16
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
17
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
35
18
  # License:: MIT
36
19
  module Zold
37
20
  # Wallets decorator that adds missing wallets to the queue to be pulled later.
38
21
  class HungryWallets < SimpleDelegator
39
22
  def initialize(wallets, remotes, copies, pool,
40
- log: Log::NULL, network: 'test')
23
+ log: Loog::NULL, network: 'test')
41
24
  @wallets = wallets
42
25
  @remotes = remotes
43
26
  @copies = copies
@@ -60,7 +43,7 @@ module Zold
60
43
  @log.error("Hungry queue is full with #{@queue.size} wallets, can't add #{id}")
61
44
  elsif @missed.exists?(id.to_s)
62
45
  @log.debug("Hungry queue has seen #{id} just #{Age.new(@missed.mtime(id.to_s))} ago \
63
- (amoung #{@missed.size} others) and it was not found")
46
+ (among #{@missed.size} others) and it was not found")
64
47
  else
65
48
  @mutex.synchronize do
66
49
  unless @queue.include?(id)
data/lib/zold/id.rb CHANGED
@@ -1,31 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'csv'
24
7
  require 'securerandom'
25
8
 
26
9
  # The ID of the wallet.
27
10
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
28
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
11
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
29
12
  # License:: MIT
30
13
  module Zold
31
14
  # Id of the wallet
@@ -1,30 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'json'
24
7
 
25
8
  # JSON page.
26
9
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
27
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
10
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
28
11
  # License:: MIT
29
12
  module Zold
30
13
  # JSON page
@@ -40,10 +23,10 @@ module Zold
40
23
  end
41
24
 
42
25
  def to_hash
43
- raise CantParse, "JSON is empty, can't parse#{@uri.empty? ? '' : " at #{@uri}"}" if @text.empty?
26
+ raise CantParse, "JSON is empty, can't parse#{" at #{@uri}" unless @uri.empty?}" if @text.empty?
44
27
  JSON.parse(@text)
45
28
  rescue JSON::ParserError => e
46
- raise CantParse, "Failed to parse JSON #{@uri.empty? ? '' : "at #{@uri}"} (#{short(e.message)}): #{short(@text)}"
29
+ raise CantParse, "Failed to parse JSON #{"at #{@uri}" unless @uri.empty?} (#{short(e.message)}): #{short(@text)}"
47
30
  end
48
31
 
49
32
  private
data/lib/zold/key.rb CHANGED
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  gem 'openssl'
24
7
  require 'openssl'
@@ -27,7 +10,7 @@ require 'tempfile'
27
10
 
28
11
  # The RSA key (either private or public).
29
12
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
13
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
31
14
  # License:: MIT
32
15
  module Zold
33
16
  # A key
@@ -1,27 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'backtrace'
24
- require_relative 'log'
7
+ require 'loog'
25
8
  require_relative 'age'
26
9
  require_relative 'endless'
27
10
  require_relative 'verbose_thread'
@@ -29,12 +12,12 @@ require_relative 'thread_pool'
29
12
 
30
13
  # Background routines.
31
14
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
15
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
33
16
  # License:: MIT
34
17
  module Zold
35
18
  # Metronome
36
19
  class Metronome
37
- def initialize(log = Log::NULL)
20
+ def initialize(log = Loog::NULL)
38
21
  @log = log
39
22
  @routines = []
40
23
  @threads = ThreadPool.new('metronome', log: log)
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'concurrent'
24
7
  require 'futex'
@@ -33,12 +16,12 @@ require_relative 'soft_error'
33
16
 
34
17
  # The async entrance of the web front.
35
18
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
36
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
19
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
37
20
  # License:: MIT
38
21
  module Zold
39
22
  # The entrance
40
23
  class AsyncEntrance
41
- def initialize(entrance, dir, log: Log::NULL,
24
+ def initialize(entrance, dir, log: Loog::NULL,
42
25
  threads: [Concurrent.processor_count, 8].max, queue_limit: 8)
43
26
  @entrance = entrance
44
27
  @dir = File.expand_path(dir)
@@ -69,7 +52,7 @@ module Zold
69
52
  File.delete(file)
70
53
  end
71
54
  end
72
- @log.info("#{@queue.size} wallets pre-loaded into async_entrace from #{@dir}") unless @queue.empty?
55
+ @log.info("#{@queue.size} wallets pre-loaded into async_entrance from #{@dir}") unless @queue.empty?
73
56
  @entrance.start do
74
57
  (0..@threads).map do |i|
75
58
  @pool.add do
@@ -135,7 +118,7 @@ module Zold
135
118
  FileUtils.rm_f(item[:file])
136
119
  @entrance.push(item[:id], body)
137
120
  @log.debug("Pushed #{item[:id]}/#{Size.new(body.length)} to #{@entrance.class.name} \
138
- in #{Age.new(start, limit: 0.1)}#{@queue.empty? ? '' : "(#{@queue.size} still in the queue)"}")
121
+ in #{Age.new(start, limit: 0.1)}#{"(#{@queue.size} still in the queue)" unless @queue.empty?}")
139
122
  end
140
123
  end
141
124
  end
@@ -1,37 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'tempfile'
24
7
  require 'time'
25
- require_relative '../log'
8
+ require 'loog'
26
9
 
27
10
  # The entrance of the web front.
28
11
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
29
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
12
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
30
13
  # License:: MIT
31
14
  module Zold
32
15
  # The entrance
33
16
  class Entrance
34
- def initialize(wallets, pipeline, log: Log::NULL)
17
+ def initialize(wallets, pipeline, log: Loog::NULL)
35
18
  @wallets = wallets
36
19
  @pipeline = pipeline
37
20
  @log = log
@@ -49,12 +32,12 @@ module Zold
49
32
  {
50
33
  history: @history.join(', '),
51
34
  history_size: @history.count,
52
- speed: @speed.empty? ? 0 : (@speed.inject(&:+) / @speed.count),
35
+ speed: @speed.empty? ? 0 : (@speed.sum / @speed.count),
53
36
  pipeline: @pipeline.to_json
54
37
  }
55
38
  end
56
39
 
57
- # Returns a list of modifed wallets (as Zold::Id)
40
+ # Returns a list of modified wallets (as Zold::Id)
58
41
  def push(id, body)
59
42
  raise 'Id can\'t be nil' if id.nil?
60
43
  raise 'Id must be of type Id' unless id.is_a?(Id)
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'time'
24
7
  require 'open3'
@@ -27,7 +10,7 @@ require 'futex'
27
10
  require 'concurrent'
28
11
  require 'json'
29
12
  require 'zold/score'
30
- require_relative '../log'
13
+ require 'loog'
31
14
  require_relative '../thread_pool'
32
15
  require_relative '../age'
33
16
  require_relative '../endless'
@@ -35,7 +18,7 @@ require_relative 'farmers'
35
18
 
36
19
  # The farm of scores.
37
20
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
38
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
21
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
39
22
  # License:: MIT
40
23
  module Zold
41
24
  # Farm
@@ -58,7 +41,7 @@ module Zold
58
41
  # <tt>lifetime</tt> is the amount of seconds for a score to live in the farm, by default
59
42
  # it's the entire day, since the Score expires in 24 hours; can be decreased for the
60
43
  # purpose of unit testing.
61
- def initialize(invoice, cache = File.join(Dir.pwd, 'farm'), log: Log::NULL,
44
+ def initialize(invoice, cache = File.join(Dir.pwd, 'farm'), log: Loog::NULL,
62
45
  farmer: Farmers::Plain.new, lifetime: 24 * 60 * 60, strength: Score::STRENGTH)
63
46
  @log = log
64
47
  @cache = File.expand_path(cache)
@@ -1,35 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'open3'
24
7
  require 'backtrace'
25
8
  require 'zold/score'
26
9
  require 'shellwords'
27
- require_relative '../log'
10
+ require 'loog'
28
11
  require_relative '../age'
29
12
 
30
13
  # Farmers.
31
14
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
15
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
33
16
  # License:: MIT
34
17
  module Zold
35
18
  # Farmer
@@ -44,7 +27,7 @@ module Zold
44
27
 
45
28
  # Plain and simple
46
29
  class Plain
47
- def initialize(log: Log::NULL)
30
+ def initialize(log: Loog::NULL)
48
31
  @log = log
49
32
  end
50
33
 
@@ -55,7 +38,7 @@ module Zold
55
38
 
56
39
  # In a child process using fork
57
40
  class Fork
58
- def initialize(log: Log::NULL)
41
+ def initialize(log: Loog::NULL)
59
42
  @log = log
60
43
  end
61
44
 
@@ -80,7 +63,7 @@ for #{after.host}:#{after.port} in #{Age.new(start)}: #{after.suffixes}")
80
63
 
81
64
  # In a child process
82
65
  class Spawn
83
- def initialize(log: Log::NULL)
66
+ def initialize(log: Loog::NULL)
84
67
  @log = log
85
68
  end
86
69
 
@@ -99,10 +82,10 @@ for #{after.host}:#{after.port} in #{Age.new(start)}: #{after.suffixes}")
99
82
  'next',
100
83
  Shellwords.escape(score)
101
84
  ].join(' ')
102
- Open3.popen2e(cmd) do |stdin, stdout, thr|
103
- Thread.current.thread_variable_set(:pid, thr.pid.to_s)
104
- at_exit { Farmers.kill(@log, thr.pid, start) }
105
- @log.debug("Scoring started in proc ##{thr.pid} \
85
+ Open3.popen2e(cmd) do |stdin, stdout, thread|
86
+ Thread.current.thread_variable_set(:pid, thread.pid.to_s)
87
+ at_exit { Farmers.kill(@log, thread.pid, start) }
88
+ @log.debug("Scoring started in proc ##{thread.pid} \
106
89
  for #{score.value}/#{score.strength} at #{score.host}:#{score.port}")
107
90
  begin
108
91
  stdin.close
@@ -116,20 +99,20 @@ for #{score.value}/#{score.strength} at #{score.host}:#{score.port}")
116
99
  @log.error(buffer)
117
100
  raise e
118
101
  end
119
- break if buffer.end_with?("\n") && thr.value.to_i.zero?
102
+ break if buffer.end_with?("\n") && thread.value.to_i.zero?
120
103
  if stdout.closed?
121
- raise "Failed to calculate the score (##{thr.value}): #{buffer}" unless thr.value.to_i.zero?
104
+ raise "Failed to calculate the score (##{thread.value}): #{buffer}" unless thread.value.to_i.zero?
122
105
  break
123
106
  end
124
107
  sleep(1)
125
108
  Thread.current.thread_variable_set(:buffer, buffer.length.to_s)
126
109
  end
127
110
  after = Score.parse(buffer.strip)
128
- @log.debug("Next score #{after.value}/#{after.strength} found in proc ##{thr.pid} \
111
+ @log.debug("Next score #{after.value}/#{after.strength} found in proc ##{thread.pid} \
129
112
  for #{after.host}:#{after.port} in #{Age.new(start)}: #{after.suffixes}")
130
113
  after
131
114
  ensure
132
- Farmers.kill(@log, thr.pid, start)
115
+ Farmers.kill(@log, thread.pid, start)
133
116
  end
134
117
  end
135
118
  end
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  $stdout.sync = true
24
7
 
@@ -38,7 +21,7 @@ require_relative '../size'
38
21
  require_relative '../wallet'
39
22
  require_relative '../age'
40
23
  require_relative '../copies'
41
- require_relative '../log'
24
+ require 'loog'
42
25
  require_relative '../dir_items'
43
26
  require_relative '../tax'
44
27
  require_relative '../id'
@@ -47,7 +30,7 @@ require_relative 'soft_error'
47
30
 
48
31
  # The web front of the node.
49
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
50
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
33
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
51
34
  # License:: MIT
52
35
  module Zold
53
36
  # Web front
@@ -234,11 +217,11 @@ this is not a normal behavior, you may want to report a bug to our GitHub reposi
234
217
  0.0
235
218
  end,
236
219
  total_mem: total_mem,
237
- threads: "#{Thread.list.select { |t| t.status == 'run' }.count}/#{Thread.list.count}",
220
+ threads: "#{Thread.list.count { |t| t.status == 'run' }}/#{Thread.list.count}",
238
221
  wallets: total_wallets,
239
222
  journal: DirItems.new(settings.journal_dir).fetch.count,
240
223
  remotes: all_remotes.count,
241
- nscore: all_remotes.map { |r| r[:score] }.inject(&:+) || 0,
224
+ nscore: all_remotes.sum { |r| r[:score] } || 0,
242
225
  farm: settings.farm.to_json,
243
226
  entrance: settings.entrance.to_json,
244
227
  date: Time.now.utc.iso8601,
@@ -1,35 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 Zerocracy
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'tempfile'
24
7
  require 'diffy'
25
8
  require 'fileutils'
26
9
  require_relative 'pipeline'
27
- require_relative '../log'
10
+ require 'loog'
11
+ require 'loog/tee'
12
+ require 'logger'
28
13
  require_relative '../age'
29
14
 
30
15
  # The pipeline with journals.
31
16
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
- # Copyright:: Copyright (c) 2018-2024 Zerocracy
17
+ # Copyright:: Copyright (c) 2018-2025 Zerocracy
33
18
  # License:: MIT
34
19
  module Zold
35
20
  # The entrance that keeps a journal for each wallet
@@ -74,7 +59,7 @@ module Zold
74
59
  )
75
60
  end
76
61
 
77
- # Returns a list of modifed wallets (as Zold::Id)
62
+ # Returns a list of modified wallets (as Zold::Id)
78
63
  def push(id, body, wallets, log, lifetime: 6)
79
64
  DirItems.new(@dir).fetch.each do |f|
80
65
  f = File.join(@dir, f)
@@ -82,12 +67,10 @@ module Zold
82
67
  end
83
68
  journal = File.join(@dir, "#{Time.now.utc.iso8601.gsub(/[^0-9]/, '-')}-#{id}")
84
69
  jlog = Logger.new(journal)
85
- jlog.level = Logger::DEBUG
86
- jlog.formatter = Log::COMPACT
87
70
  jlog.info("push(#{id}, #{body.length} bytes): starting...")
88
71
  jlog.info("Time: #{Time.now.utc.iso8601}")
89
72
  jlog.info("Zold gem version: #{Zold::VERSION}")
90
- modified = @pipeline.push(id, body, JournaledPipeline::Wallets.new(wallets, jlog), Log::Tee.new(log, jlog))
73
+ modified = @pipeline.push(id, body, JournaledPipeline::Wallets.new(wallets, jlog), Loog::Tee.new(log, jlog))
91
74
  jlog.info("push(#{id}): done")
92
75
  FileUtils.mv(journal, "#{journal}-done")
93
76
  modified