dialog_ruby 0.1.10 → 0.1.11
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.
- checksums.yaml +4 -4
- data/Dockerfile +13 -0
- data/{lib/storage/redis → _dev}/redisPubSub.rb +1 -1
- data/background/_init.rb +43 -0
- data/background/batch.rb +69 -0
- data/background/redis.rb +34 -0
- data/dialog_ruby.gemspec +6 -7
- data/exec/conf/redis_global.conf +4 -2
- data/exec/dialog.sh +28 -26
- data/exec/git_sync/dialog__sync.service +1 -1
- data/exec/prereq.sh +18 -1
- data/exec/systemd/dialog_background.service +29 -0
- data/exec/systemd/dialog_redis.service +1 -1
- data/exec/systemd/dialog_runMode@.service +16 -6
- data/exec/systemd/dialog_runner@.path +8 -0
- data/lib/{triggers/start → begin}/_main.rb +29 -21
- data/lib/begin/_pre_bot.rb +58 -0
- data/lib/begin/background.rb +24 -0
- data/lib/{triggers/start → begin}/bot.rb +27 -6
- data/lib/{triggers/start → begin}/tdlib.rb +12 -16
- data/lib/configuration.rb +39 -27
- data/lib/dialect/canvas/element/send/Inline_query_result.rb +2 -0
- data/lib/dialect/canvas/element/send/background.rb +28 -0
- data/lib/dialect/canvas/element/send/recognize.rb +3 -2
- data/lib/dialect/canvas/element/send/restrict.rb +0 -1
- data/lib/dialect/canvas/element/send/tdlib_chat.rb +1 -1
- data/lib/dialect/canvas/element/send/tdlib_message.rb +1 -1
- data/lib/dialect/codegen/codegen.rb +9 -9
- data/lib/dialect/codegen/erb/functional/2.2.1.Events2ModReceive.erb +27 -4
- data/lib/dialect/codegen/erb/functional/4.1.AppEvent2Elements.erb +7 -2
- data/lib/dialect/codegen/erb/functional/5.1.Element2ModElements.erb +1 -1
- data/lib/dialect/codegen/erb/functional/7.ElementChains.erb +7 -6
- data/lib/dialog_ruby.rb +5 -2
- data/lib/metamess/_run.rb +1 -0
- data/lib/metamess/content/content_o-contact_f.rb +41 -0
- data/lib/metamess/content/content_o.rb +7 -6
- data/lib/metamess/func.rb +0 -24
- data/lib/metamess/naming.rb +8 -5
- data/lib/metamess/service/service_o-inline_f.rb +4 -3
- data/lib/require.rb +21 -2
- data/lib/statistics/func.rb +72 -0
- data/lib/statistics/general.rb +44 -0
- data/lib/statistics/redisDump.rb +49 -0
- data/lib/storage/redis/cached/pullpush.rb +76 -0
- data/lib/storage/redis/cached/pushPreproc.rb +41 -0
- data/lib/storage/redis/func.rb +47 -0
- data/lib/storage/redis/stat/push.rb +33 -0
- data/lib/tdlib/auth.rb +8 -7
- data/lib/tdlib/init.rb +5 -5
- data/lib/telegram/botapi.rb +2 -1
- data/lib/telegram/wrappers.rb +1 -2
- data/lib/tooling/log.rb +0 -1
- data/lib/tooling/strings.rb +12 -0
- data/lib/triggers/_func.rb +39 -0
- data/lib/triggers/{_meta/full.rb → console_start.rb} +8 -5
- data/lib/triggers/deploy.rb +104 -0
- data/lib/triggers/false.rb +8 -6
- data/lib/triggers/init.rb +23 -10
- data/lib/triggers/systemd_start.rb +24 -0
- data/lib/version.rb +1 -1
- metadata +83 -41
- data/_dev/sidekiq.rb +0 -28
- data/exec/systemd/_fix/dialog_bot@.path +0 -6
- data/exec/systemd/_fix/dialog_bot_dev@.path +0 -6
- data/exec/systemd/_fix/dialog_bot_dev_pre@.service +0 -16
- data/lib/storage/redis/rediscached.rb +0 -97
- data/lib/triggers/deploy/deploy.rb +0 -78
- data/lib/triggers/start/_pre_bot.rb +0 -43
@@ -25,7 +25,12 @@ module Dialog
|
|
25
25
|
|
26
26
|
<% if args[:dialect][:constructors][Dialog.config.naming.app.to_sym][:Element2ModSend][:repack][:fFqn2tFqn].has_key?(prop[:tFqn].to_sym)%>
|
27
27
|
args[:x][:exec][:<%=prop[:tFqn] %>] = <%= args[:dialect][:constructors][Dialog.config.naming.app.to_sym][:Element2ModSend][:repack][:fFqn2tFqn][prop[:tFqn].to_sym] %>
|
28
|
-
args[:
|
28
|
+
if args[:smsg][:parse_mode] == 'Markdown' or args[:smsg][:parse_mode].nil?
|
29
|
+
text = Dialog::Strings.text2md(elementText_<%= prop[:tOID] %>(args[:mmsg]))
|
30
|
+
else
|
31
|
+
text = elementText_<%= prop[:tOID] %>(args[:mmsg])
|
32
|
+
end
|
33
|
+
args[:x][:exec][:<%=prop[:tFqn] %>][:text] = text
|
29
34
|
<% else %>
|
30
35
|
args[:x][:exec][:<%=prop[:tFqn] %>] = {}
|
31
36
|
args[:x][:send][:<%=prop[:tFqn] %>] = {}
|
@@ -60,7 +65,7 @@ module Dialog
|
|
60
65
|
<% end %>
|
61
66
|
|
62
67
|
<% hash_Text.each do |tOID, text| %>
|
63
|
-
def elementText_<%= tOID %>
|
68
|
+
def elementText_<%= tOID %>(mmsg)
|
64
69
|
<<-HEREDOC
|
65
70
|
<%= text %>
|
66
71
|
HEREDOC
|
@@ -19,7 +19,7 @@ module Dialog
|
|
19
19
|
|
20
20
|
base = args[:dialect][:perView][Dialog.config.naming.app.to_sym][viewId][:Element2ModElements][:repack][:atoms]
|
21
21
|
|
22
|
-
if base[:keyboards].has_key?(tOID.to_s)
|
22
|
+
if base.has_key?(:keyboards) and base[:keyboards].has_key?(tOID.to_s)
|
23
23
|
base[:keyboards].each do |tOID, hash_tOID|
|
24
24
|
a << "# #{tOID}"
|
25
25
|
a << "def dialog__Element2ModElements__#{tOID}(args)"
|
@@ -27,10 +27,10 @@ module Dialog
|
|
27
27
|
codeGen_ElementChains2ChainsRun(args, viewId, propX, a, hash_Text, hash_tFqn, mode) if chainsRun == true
|
28
28
|
end
|
29
29
|
hash_Text.each do |tOID, text|
|
30
|
-
a << "def elementText_#{tOID}"
|
30
|
+
a << "def elementText_#{tOID}(mmsg)"
|
31
31
|
a << " <<-HEREDOC "
|
32
32
|
a << " #{text}"
|
33
|
-
a << 'HEREDOC'
|
33
|
+
a << ' HEREDOC'
|
34
34
|
a << 'end'
|
35
35
|
end
|
36
36
|
return a
|
@@ -47,7 +47,8 @@ defName = "dialog__ElementChains__#{propX[:fOID]}"
|
|
47
47
|
|
48
48
|
if args[:dialect][:constructors][Dialog.config.naming.app.to_sym][:Element2ModSend][:repack][:fFqn2tFqn].has_key?(propX[:tFqn].to_sym)
|
49
49
|
a << " args[:x][:exec][:#{propX[:tFqn]}] = #{args[:dialect][:constructors][Dialog.config.naming.app.to_sym][:Element2ModSend][:repack][:fFqn2tFqn][propX[:tFqn].to_sym]}"
|
50
|
-
a << " args[:
|
50
|
+
a << " args[:smsg][:parse_mode] == 'Markdown' ? text = Dialog::Strings.text2md(elementText_#{propX[:tOID]}(args[:mmsg])) : text = elementText_#{propX[:tOID]}(args[:mmsg])"
|
51
|
+
a << " args[:x][:exec][:#{propX[:tFqn]}][:text] = text"
|
51
52
|
else
|
52
53
|
a << " args[:x][:exec][:#{propX[:tFqn]}] = {}"
|
53
54
|
a << " args[:x][:send][:#{propX[:tFqn]}] = {}"
|
@@ -65,7 +66,7 @@ defName = "dialog__ElementChains__#{propX[:fOID]}"
|
|
65
66
|
end
|
66
67
|
|
67
68
|
args[:dialect][:perView][Dialog.config.naming.app.to_sym][viewId][:ElementChains][:repack][:chain][:order].each do |k, v|
|
68
|
-
if k == propX[:fOID].to_sym
|
69
|
+
if k == propX[:fOID].to_sym and v.has_key?(3) # true chans
|
69
70
|
# #{k, #{v
|
70
71
|
a << " dialog__ElementChains__#{propX[:tOID]}(args)"
|
71
72
|
end
|
@@ -77,13 +78,13 @@ defName = "dialog__ElementChains__#{propX[:fOID]}"
|
|
77
78
|
<% if args[:dialect][:perView][Dialog.config.naming.app.to_sym][viewId][:ElementChains].is_a?(Hash)
|
78
79
|
run = args[:dialect][:perView][Dialog.config.naming.app.to_sym][viewId][:ElementChains][:repack][:fOID]
|
79
80
|
result = codeGen_ElementChains2Chains(args, run, viewId, 'fOID') %>
|
80
|
-
<%= result.join("\n
|
81
|
+
<%= result.join("\n") %>
|
81
82
|
<% end%>
|
82
83
|
|
83
84
|
<% if args[:dialect][:perView][Dialog.config.naming.app.to_sym][viewId][:ElementChains].is_a?(Hash)
|
84
85
|
run = args[:dialect][:perView][Dialog.config.naming.app.to_sym][viewId][:ElementChains][:repack][:tOID]
|
85
86
|
result = codeGen_ElementChains2Chains(args, run, viewId, 'tOID') %>
|
86
|
-
<%= result.join("\n
|
87
|
+
<%= result.join("\n") %>
|
87
88
|
<% end%>
|
88
89
|
|
89
90
|
end
|
data/lib/dialog_ruby.rb
CHANGED
@@ -14,11 +14,14 @@ module Dialog
|
|
14
14
|
class << self
|
15
15
|
|
16
16
|
def create
|
17
|
+
Encoding.default_internal = Encoding::UTF_8
|
18
|
+
Encoding.default_external = Encoding::UTF_8
|
19
|
+
|
17
20
|
version = RUBY_VERSION.split('.').map { |x| x.to_i }
|
18
|
-
if (version <=> [2,
|
21
|
+
if (version <=> [2, 4, 9]) >= 1
|
19
22
|
require_relative './require.rb'
|
20
23
|
_require_min
|
21
|
-
send("trigger_#{Dialog.config.run.scope}".to_sym)
|
24
|
+
Dialog::Triggers.send("trigger_#{Dialog.config.run.scope}".to_sym)
|
22
25
|
else
|
23
26
|
puts "Minimum required Ruby version - 2.5.0"
|
24
27
|
end
|
data/lib/metamess/_run.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 2 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module Dialog
|
13
|
+
module Metamess
|
14
|
+
class << self
|
15
|
+
|
16
|
+
def collect_EventContentContact(args)
|
17
|
+
metaStep(args, __method__.to_s)
|
18
|
+
### BODY
|
19
|
+
args[:mmsg][:fqnrun][:g] = Dialog::Naming::Class::Event::Order::Content::Family::Contact::Genus.Main
|
20
|
+
|
21
|
+
### EOF BODY
|
22
|
+
return final(args)
|
23
|
+
end
|
24
|
+
|
25
|
+
def collect_EventContentContactMain(args)
|
26
|
+
metaStep(args, __method__.to_s)
|
27
|
+
### BODY
|
28
|
+
|
29
|
+
metamessGen(args,eval2mmsg = {
|
30
|
+
:from => {f1: '[:contact]'},
|
31
|
+
:to => {t1: '[:fqndata][:f][:contact]'},
|
32
|
+
:fFields => {v1: :phone_number, v2: :first_name, v3: :last_name, v4: :user_id},
|
33
|
+
})
|
34
|
+
|
35
|
+
### EOF BODY
|
36
|
+
return final(args)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -86,15 +86,16 @@ module Dialog
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def getChatContext(args)
|
89
|
-
case args[:
|
89
|
+
case args[:mmsg][:fqndata][:o][:chat][:type]
|
90
90
|
when 'private'
|
91
|
-
|
92
|
-
|
91
|
+
context = Naming::ChatContext.Private
|
92
|
+
when 'group'
|
93
|
+
leaveGroup(args)
|
93
94
|
when 'supergroup'
|
94
|
-
|
95
|
-
args[:x][:redis][:territory] = 'context'
|
96
|
-
args[:mmsg][:fqndata][:o][:chat][:context] = Dialog::RedisCached.pullCached(args)
|
95
|
+
context = Dialog::Storage::Redis.pullCached({ :type => 'chat', :key => 'context'}, args)
|
97
96
|
end
|
97
|
+
|
98
|
+
context.nil? ? nodata(args: args, from: 'context') : args[:mmsg][:fqndata][:o][:chat][:context] = context
|
98
99
|
end
|
99
100
|
|
100
101
|
### Message
|
data/lib/metamess/func.rb
CHANGED
@@ -148,30 +148,6 @@ module Dialog
|
|
148
148
|
return map
|
149
149
|
end
|
150
150
|
|
151
|
-
|
152
|
-
def getChatContext(args)
|
153
|
-
Dialog.clearRedis(args)
|
154
|
-
case args[:mmsg][:fqndata][:o][:chat][:type]
|
155
|
-
when 'private'
|
156
|
-
context = Naming::ChatContext.Private
|
157
|
-
|
158
|
-
when 'group'
|
159
|
-
leaveGroup(args)
|
160
|
-
|
161
|
-
when 'supergroup'
|
162
|
-
args[:x][:redis][:region] = 'chat'
|
163
|
-
args[:x][:redis][:territory] = 'context'
|
164
|
-
context = Dialog::RedisCached.pullCached(args)
|
165
|
-
|
166
|
-
when 'channel'
|
167
|
-
context = 'unknown'
|
168
|
-
|
169
|
-
end
|
170
|
-
|
171
|
-
#Check
|
172
|
-
args[:x][:metamess][:key] = 'context'
|
173
|
-
context.nil? ? nodata(args: args, from: 'context') : args[:mmsg][:fqndata][:o][:chat][:context] = context
|
174
|
-
end
|
175
151
|
|
176
152
|
|
177
153
|
def leaveGroup(args)
|
data/lib/metamess/naming.rb
CHANGED
@@ -12,11 +12,11 @@
|
|
12
12
|
|
13
13
|
module Dialog; module Naming;
|
14
14
|
module ChatContext
|
15
|
-
def ChatContext.Private; '
|
16
|
-
def ChatContext.Noman; '
|
17
|
-
def ChatContext.Botman; '
|
18
|
-
def ChatContext.Climan; '
|
19
|
-
def ChatContext.Fullman; '
|
15
|
+
def ChatContext.Private; 'private'; end
|
16
|
+
def ChatContext.Noman; 'noman'; end
|
17
|
+
def ChatContext.Botman; 'botman'; end
|
18
|
+
def ChatContext.Climan; 'climan'; end
|
19
|
+
def ChatContext.Fullman; 'fullman'; end
|
20
20
|
end
|
21
21
|
|
22
22
|
module Class
|
@@ -57,6 +57,9 @@ module Dialog; module Naming;
|
|
57
57
|
def Family.Notext; 'notext'; end
|
58
58
|
|
59
59
|
def Family.Contact; 'contact'; end
|
60
|
+
module Contact; module Genus
|
61
|
+
def Genus.Main; 'main'; end
|
62
|
+
end; end
|
60
63
|
def Family.Location; 'location'; end
|
61
64
|
def Family.Invoice; 'invoice'; end
|
62
65
|
end; end
|
@@ -28,8 +28,9 @@ module Dialog
|
|
28
28
|
content_user(args)
|
29
29
|
#location # TODO
|
30
30
|
metamessGen(args,eval2mmsg = {
|
31
|
-
:to => {t1: '[:g][:inline]'},
|
32
|
-
:fFields => {v1: :id, v2: :query
|
31
|
+
:to => {t1: '[:fqndata][:g][:inline]'},
|
32
|
+
:fFields => {v1: :id, v2: :query},
|
33
|
+
:fFieldsOpt => {v1: :offset},
|
33
34
|
})
|
34
35
|
### EOF BODY
|
35
36
|
return final(args)
|
@@ -41,7 +42,7 @@ module Dialog
|
|
41
42
|
### BODY
|
42
43
|
content_user(args)
|
43
44
|
metamessGen(args,eval2mmsg = {
|
44
|
-
:to => {t1: '[:g][:inline]'},
|
45
|
+
:to => {t1: '[:fqndata][:g][:inline]'},
|
45
46
|
:fFields => {v1: :result_id, v2: :query},
|
46
47
|
:tFields => {v1: :id, v2: :query},
|
47
48
|
:fFieldsOpt => {v1: :inline_message_id},
|
data/lib/require.rb
CHANGED
@@ -21,12 +21,26 @@ module Dialog
|
|
21
21
|
require 'socket'
|
22
22
|
require 'fileutils'
|
23
23
|
require 'open3'
|
24
|
+
require 'date'
|
25
|
+
|
24
26
|
|
25
|
-
###
|
27
|
+
### GEMS
|
26
28
|
require 'dry-configurable'
|
29
|
+
|
30
|
+
|
27
31
|
require_relative './version.rb'
|
28
|
-
require_relative './configuration.rb'
|
29
32
|
Dir.glob(File.join("#{File.dirname(__FILE__)}/triggers/**", "*.rb")).each{|f| require f}
|
33
|
+
Dir.glob(File.join("#{File.dirname(__FILE__)}/begin/**", "*.rb")).each{|f| require f}
|
34
|
+
require_relative './configuration.rb'
|
35
|
+
end
|
36
|
+
|
37
|
+
def _require_background
|
38
|
+
require 'sidekiq'
|
39
|
+
require 'sidekiq/batch'
|
40
|
+
require 'sidekiq/api'
|
41
|
+
require 'sidekiq-status'
|
42
|
+
require 'sidekiq-cron'
|
43
|
+
require 'sidekiq-rate-limiter'
|
30
44
|
end
|
31
45
|
|
32
46
|
|
@@ -35,14 +49,19 @@ module Dialog
|
|
35
49
|
require 'uri'
|
36
50
|
require 'erb'
|
37
51
|
require 'shellwords'
|
52
|
+
require 'drb'
|
38
53
|
|
39
54
|
### GEMS
|
55
|
+
require 'active_support/time'
|
40
56
|
require 'dialect_lookup'
|
41
57
|
require 'telegram/bot'
|
42
58
|
require 'i18n'
|
43
59
|
require 'redis'
|
44
60
|
require 'concurrent'
|
45
61
|
require 'oj'
|
62
|
+
require 'sidekiq'
|
63
|
+
require 'sidekiq/batch'
|
64
|
+
require 'sidekiq-status'
|
46
65
|
require 'sidekiq-cron'
|
47
66
|
require 'sidekiq-rate-limiter'
|
48
67
|
#lazy_object
|
@@ -0,0 +1,72 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 2 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
|
13
|
+
module Dialog
|
14
|
+
module Statistics
|
15
|
+
class << self
|
16
|
+
|
17
|
+
|
18
|
+
def defHeaderUserOverall(args)
|
19
|
+
return {:type => 'UserOverall', :typeKey => args[:mmsg][:fqndata][:o][:from][:id]}
|
20
|
+
end
|
21
|
+
|
22
|
+
def pushStatUserOverall(args, push)
|
23
|
+
run = defHeaderUserOverall(args)
|
24
|
+
run[:key] = push[:key]
|
25
|
+
run[:value] = push[:value] if push.has_key?(:value)
|
26
|
+
run[:redisOp] = push[:redisOp] if push.has_key?(:redisOp)
|
27
|
+
Dialog::Storage::Redis.pushStat(run)
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def defHeaderPerUser(args)
|
32
|
+
return {:type => 'perUser', :typeKey => "#{args[:mmsg][:fqndata][:o][:from][:id]}:#{args[:mmsg][:fqndata][:o][:chat][:id]}"}
|
33
|
+
end
|
34
|
+
|
35
|
+
def pushStatPerUser(args, push)
|
36
|
+
run = defHeaderPerUser(args)
|
37
|
+
run[:key] = push[:key]
|
38
|
+
run[:value] = push[:value] if push.has_key?(:value)
|
39
|
+
run[:redisOp] = push[:redisOp] if push.has_key?(:redisOp)
|
40
|
+
Dialog::Storage::Redis.pushStat(run)
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
def defHeaderPerChat(args)
|
45
|
+
return {:type => 'perChat', :typeKey => "#{args[:mmsg][:fqndata][:o][:chat][:id]}"}
|
46
|
+
end
|
47
|
+
|
48
|
+
def pushStatPerChat(args, push)
|
49
|
+
run = defHeaderPerChat(args)
|
50
|
+
run[:key] = push[:key]
|
51
|
+
run[:value] = push[:value] if push.has_key?(:value)
|
52
|
+
run[:redisOp] = push[:redisOp] if push.has_key?(:redisOp)
|
53
|
+
Dialog::Storage::Redis.pushStat(run)
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def defHeaderFQNPerUser(args)
|
58
|
+
return {:type => 'FQNPerUser', :typeKey => "#{args[:mmsg][:fqndata][:o][:from][:id]}:#{args[:mmsg][:fqn].map{|k,v| "#{v}"}.join('_')
|
59
|
+
}"}
|
60
|
+
end
|
61
|
+
|
62
|
+
def pushStatFQNPerUser(args, push)
|
63
|
+
run = defHeaderFQNPerUser(args)
|
64
|
+
run[:key] = push[:key]
|
65
|
+
run[:value] = push[:value] if push.has_key?(:value)
|
66
|
+
run[:redisOp] = push[:redisOp] if push.has_key?(:redisOp)
|
67
|
+
Dialog::Storage::Redis.pushStat(run)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 2 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
|
13
|
+
module Dialog
|
14
|
+
module Statistics
|
15
|
+
class << self
|
16
|
+
|
17
|
+
|
18
|
+
def general(args)
|
19
|
+
|
20
|
+
msgLast = {:key => 'msgLast', :value => args[:mmsg][:fqndata][:o][:msg][:date]}
|
21
|
+
msgCount = {:key => 'msgCountOverall', :redisOp => 'inc'}
|
22
|
+
|
23
|
+
##UserOverall
|
24
|
+
pushStatUserOverall(args, msgLast)
|
25
|
+
pushStatUserOverall(args, msgCount)
|
26
|
+
|
27
|
+
##PerUser
|
28
|
+
pushStatPerUser(args, msgLast)
|
29
|
+
pushStatPerUser(args, msgCount)
|
30
|
+
|
31
|
+
##PerChat
|
32
|
+
pushStatPerChat(args, msgLast)
|
33
|
+
pushStatPerChat(args, msgCount)
|
34
|
+
|
35
|
+
##PerFQN
|
36
|
+
pushStatFQNPerUser(args, msgLast)
|
37
|
+
pushStatFQNPerUser(args, msgCount)
|
38
|
+
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 2 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
|
13
|
+
module Dialog
|
14
|
+
module Statistics
|
15
|
+
class << self
|
16
|
+
|
17
|
+
def redisDump2json
|
18
|
+
|
19
|
+
require 'redis/dump'
|
20
|
+
require 'json'
|
21
|
+
|
22
|
+
stat = {}
|
23
|
+
redisDump = Redis::Dump.new 2, 'redis://localhost:4000'
|
24
|
+
dump = redisDump.dump
|
25
|
+
|
26
|
+
dump.each do |list|
|
27
|
+
src = JSON.parse(list)
|
28
|
+
preKey = src["key"].split(':')
|
29
|
+
keyHead = preKey[0].to_sym
|
30
|
+
stat[keyHead] ||= {}
|
31
|
+
keySecond = preKey[1].to_sym
|
32
|
+
stat[keyHead][keySecond] ||= {}
|
33
|
+
|
34
|
+
preKey[2] ? keyType = preKey[2].to_sym : keyType = :main
|
35
|
+
stat[keyHead][keySecond][keyType] ||= {}
|
36
|
+
|
37
|
+
src["value"].each do |data|
|
38
|
+
stat[keyHead][keySecond][keyType][data[0][1..-1].to_sym] = data[1].to_i
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
json = JSON.generate(stat)
|
44
|
+
return json
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|