peons 0.0.3 → 0.0.4

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 (3) hide show
  1. data/bin/peons +128 -0
  2. data/lib/peons.rb +1 -1
  3. metadata +3 -2
@@ -0,0 +1,128 @@
1
+ #! /usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require "thor"
5
+ require File.expand_path("../lib/peons", File.dirname(__FILE__))
6
+
7
+ class Peons::CLI < Thor
8
+ namespace :peons
9
+
10
+ PREFIX = "peons"
11
+
12
+ desc "summary", "Show a quick summary of all your peons."
13
+ def summary
14
+ h1 "Peons Reporting: Work work"
15
+ h2 "Total: %d" % queues.size
16
+
17
+ queues.each do |key|
18
+ h2 "%s (%d)" % [key, key.llen]
19
+
20
+ say "- backup: %d" % total_backups(key)
21
+ say "- errors: %d" % key[:errors].llen
22
+ end
23
+
24
+ say "\n" * 2
25
+ end
26
+
27
+ desc "show QUEUE_NAME", "Show the details of a given queue."
28
+ def show(queue)
29
+ key = ns(PREFIX)[queue]
30
+
31
+ h1 "%s (%d)" % [key, key.llen]
32
+
33
+ backups(key) do |backup|
34
+ h2 backup
35
+
36
+ ns(backup).lrange(0, -1).each_with_index do |val, idx|
37
+ say "%2d. %s" % [idx+1, val]
38
+ end
39
+ end
40
+
41
+ h2 "%s (displaying first 10)" % key[:errors]
42
+
43
+ key[:errors].lrange(0, 10).each_with_index do |error, idx|
44
+ say "%2d. %s" % [idx+1, error]
45
+ end
46
+ end
47
+
48
+ desc "harvest QUEUE_NAME", "Harvest all backups and merge them back."
49
+ def harvest(queue)
50
+ key = ns(PREFIX)[queue]
51
+
52
+ h1 "Harvesting: %s" % key
53
+
54
+ backups(key) do |backup|
55
+ h2 "Processing: %s" % backup
56
+
57
+ bak = ns(backup)
58
+
59
+ loop do
60
+ bak.rpoplpush(key)
61
+
62
+ break if bak.llen.zero?
63
+ end
64
+
65
+ say "- Cleaning up..."
66
+ bak.del
67
+ say "- Done!"
68
+ say
69
+ end
70
+ end
71
+
72
+ desc "pristine QUEUE_NAME", "Clear all errors for a given queue."
73
+ def pristine(queue)
74
+ key = ns(PREFIX)[queue]
75
+
76
+ h1 "Clearing Errors: %s" % key
77
+
78
+ response = ask("Are you sure? (y/N)")
79
+
80
+ if response.downcase.strip == "y"
81
+ say
82
+ say "- Clearing %d errors." % key[:errors].llen
83
+ key[:errors].del
84
+ say "- Done!"
85
+ say
86
+ end
87
+ end
88
+
89
+ private
90
+ def h1(str)
91
+ puts
92
+ puts str
93
+ puts "=" * str.size
94
+ end
95
+
96
+ def h2(str)
97
+ puts
98
+ puts str
99
+ puts "-" * str.size
100
+ end
101
+
102
+ def redis
103
+ Peons.redis
104
+ end
105
+
106
+ def ns(key)
107
+ Nest.new(key, redis)
108
+ end
109
+
110
+ def queues
111
+ redis.keys(ns(PREFIX)["*"]).
112
+ reject { |key| key.end_with?(":backup") or key.end_with?(":errors") }.
113
+ map { |key| Nest.new(key, redis) }
114
+ end
115
+
116
+ def backups(key)
117
+ redis.keys(key["*"][:backup]).each { |e| yield e }
118
+ end
119
+
120
+ def total_backups(key)
121
+ redis.keys(key["*"][:backup]).inject(0) do |acc, key|
122
+ acc + redis.llen(key)
123
+ end
124
+ end
125
+ end
126
+
127
+ Peons::CLI.start
128
+
@@ -2,7 +2,7 @@ require "redis"
2
2
  require "nest"
3
3
 
4
4
  module Peons
5
- VERSION = "0.0.3"
5
+ VERSION = "0.0.4"
6
6
 
7
7
  class Queue < Nest
8
8
  alias :push :lpush
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Cyril David
@@ -65,6 +65,7 @@ extensions: []
65
65
  extra_rdoc_files: []
66
66
 
67
67
  files:
68
+ - bin/peons
68
69
  - lib/peons.rb
69
70
  - README.markdown
70
71
  - LICENSE