fluent-plugin-deskcom 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 952794ba64a64955c3fbd9f599c5faedc81c3374
4
- data.tar.gz: 8619e94793db9f42d657b19e0f30207233a7e8bc
3
+ metadata.gz: f8e389008903fec965494fca734fed91ab1bb777
4
+ data.tar.gz: 534bf1b6679a6741e9bf9fbfe628f94d0a079053
5
5
  SHA512:
6
- metadata.gz: b2e0bc35b53bfdb8fd92fee8ffe933ded9d45c3d2d276d6202542ac0bacf5e4dfcac526df97ca32f805806df8037db295ff4d5264cb0edd6b43a0fb5bc9bcd29
7
- data.tar.gz: 55e0f6aba3af35167ff91d506b0faa0a516cf3b18cc7908d4beb2779da639327f84267557dec8982310d32c9a1257763491aae21ab339242457113cd9714b1d0
6
+ metadata.gz: ef1ef41f236a754ee61035bf4e80864e2bf77c06ae982b5092d40b17daa3bce0b261ed976097c7b7331402cc6f865a7481600b4c4540894b4ea0c6ee7b6766fe
7
+ data.tar.gz: 297c61cec432104e6142b4e0e13c747717f4dac00c29f4e1141bdac7d2a106b84c7d0f7cf640804db568fbc06f2a656c9346d2ae51e0dc20fba4cf4f37b5d42f
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "fluent-plugin-deskcom"
6
- spec.version = "0.0.2"
6
+ spec.version = "0.0.3"
7
7
  spec.authors = ["Toru Takahashi"]
8
8
  spec.email = ["torutakahashi.ayashi@gmail.com"]
9
9
  spec.summary = %q{Input plugin to collect data from Deskcom.}
@@ -2,12 +2,14 @@ module Fluent
2
2
  class DeskcomInput < Fluent::Input
3
3
  Fluent::Plugin.register_input('deskcom', self)
4
4
 
5
- # un-support yet: nest flat
5
+ # unsupported yet: nest flat
6
6
  OUTPUT_FORMAT_TYPE = %w(simple)
7
- # un-support yet: brand article reply ~
7
+ # unsupported yet: brand article reply ~
8
8
  INPUT_API_TYPE = %w(cases replies)
9
9
  DEFAULT_PER_PAGE = 50
10
10
 
11
+ SORT_DIRECTION_TYPE=%w(asc desc)
12
+
11
13
  config_param :subdomain, :string, :default => nil
12
14
  config_param :consumer_key, :string, :default => nil
13
15
  config_param :consumer_secret, :string, :default => nil
@@ -19,6 +21,7 @@ class DeskcomInput < Fluent::Input
19
21
  config_param :tag, :string, :default => nil
20
22
  config_param :time_column, :string, :default => nil
21
23
  config_param :interval, :integer,:default => 5
24
+ config_param :sort_direction, :string, :default => 'asc'
22
25
 
23
26
  def initialize
24
27
  super
@@ -38,6 +41,10 @@ class DeskcomInput < Fluent::Input
38
41
  raise Fluent::ConfigError, "input_api value undefined #{@input_api}"
39
42
  end
40
43
 
44
+ if !SORT_DIRECTION_TYPE.include?(@sort_direction)
45
+ raise Fluent::ConfigError, "sort_direction value undefined #{@sort_direction}"
46
+ end
47
+
41
48
  if !@consumer_key || !@consumer_secret || !@oauth_token || !@oauth_token_secret
42
49
  raise Fluent::ConfigError, "missing values in consumer_key or consumer_secret or oauth_token or oauth_token_secret"
43
50
  end
@@ -48,7 +55,6 @@ class DeskcomInput < Fluent::Input
48
55
 
49
56
  @tick = @interval * 60
50
57
 
51
- @stored_time = load_store_file
52
58
  @per_page = DEFAULT_PER_PAGE
53
59
 
54
60
  Desk.configure do |config|
@@ -74,47 +80,61 @@ class DeskcomInput < Fluent::Input
74
80
  def run
75
81
  while true
76
82
  @started_time = Time.now.to_i
83
+ @stored_time = load_store_file(@store_file)
77
84
  get_stream
78
- save_store_file unless !@store_file
85
+ save_store_file(@store_file, @started_time) unless !@store_file
79
86
  sleep @tick
80
87
  end
81
88
  end
82
89
 
83
- def get_stream()
84
- page = 0
85
- if @input_api == 'cases' then
90
+ def get_stream
91
+ page = 1
92
+ loop do
93
+ cases = nil
86
94
  begin
87
- page = page + 1
88
- cases = Desk.cases(:since_updated_at => @stored_time, :page => page, :per_page => @per_page)
89
- # Sleep for rate limit
90
- # ToDo: Check body "Too Many Requests" and Sleep
91
- sleep(2)
95
+ cases = Desk.cases(:since_updated_at => @stored_time, :max_updated_at => @started_time,
96
+ :page => page, :per_page => @per_page,
97
+ :sort_field => 'updated_at', :sort_direction => @sort_direction)
98
+ rescue Desk::NotFound => e
99
+ $log.info "No more records: #{e.message}"
100
+ break
101
+ end
92
102
 
103
+ if @input_api == 'cases' then
93
104
  cases.each do |c|
94
105
  get_content(c)
95
106
  end
96
- $log.info "Case total entry: #{cases.total_entries} page: #{page}"
97
- end while (cases.total_entries/@per_page.to_f).ceil > page
98
- elsif @input_api == 'replies'
99
- begin
100
- page = page + 1
101
- cases = Desk.cases(:since_updated_at => @stored_time, :page => page, :per_page => @per_page)
102
- # Sleep for rate limit
103
- # ToDo: Check body "Too Many Requests" and Sleep
104
- sleep(2)
107
+ $log.info "Case total entries: #{cases.total_entries} page: #{page}"
105
108
 
109
+ elsif @input_api == 'replies'
106
110
  cases.each do |c|
107
111
  Desk.case_replies(c.id).each do |r|
108
- # Sleep for rate limit
109
- # ToDo: Check body "Too Many Requests" and Sleep
110
- sleep(2)
111
-
112
112
  r[:case_id] = c.id
113
113
  get_content(r) if c.count > 0
114
114
  end
115
115
  end
116
- $log.info "Case total entry include reply #{cases.total_entries} page: #{page}"
117
- end while (cases.total_entries/@per_page.to_f).ceil > page
116
+ $log.info "Case total entries with replies: #{cases.total_entries} page: #{page}"
117
+ end
118
+
119
+ page = page + 1
120
+ # if getting above 500 pages limit for a search
121
+ # (http://dev.desk.com/API/cases/#list), reset the reference point and
122
+ # the page count to 1
123
+ if page >= 500
124
+ require 'time'
125
+ if @sort_direction == 'asc'
126
+ # if sorting by ascending 'updated_at', reset the lower filter limit
127
+ # to focus on the upper part of the records that would reside in the
128
+ # 'pages' past 500
129
+ @stored_time = Time.parse(cases.map(&:updated_at).sort.last).to_i
130
+ else
131
+ # if sorting by descending 'updated_at', reset the upper filter limit
132
+ # to focus on the lower part of the records that would reside in the
133
+ # 'pages' past 500
134
+ @started_time = Time.parse(cases.map(&:updated_at).sort.first).to_i
135
+ end
136
+ page = 1
137
+ end
118
138
  end
119
139
  rescue => e
120
140
  $log.error "deskcom run: #{e.message}"
@@ -125,14 +145,6 @@ class DeskcomInput < Fluent::Input
125
145
  when 'simple'
126
146
  record = Hash.new
127
147
  status.each_pair do |k,v|
128
- # @stored_time <= store data's updated time < @started_time
129
- if (k == 'updated_at') then
130
- at_time = Time.parse(v).to_i
131
- if (at_time >= @started_time) || (at_time < @stored_time) then
132
- next
133
- end
134
- end
135
-
136
148
  if (!@time_column.nil? && k == "#{@time_column}") then
137
149
  @time_value = Time.parse(v).to_i rescue nil
138
150
  end
@@ -158,34 +170,29 @@ class DeskcomInput < Fluent::Input
158
170
  $log.error "deskcom get_content: #{e.message}"
159
171
  end
160
172
 
161
- # => int
162
- def load_store_file
163
- begin
164
- f = Pathname.new(@store_file)
165
- stored_time = 0
166
- f.open('r') do |f|
167
- stored = YAML.load_file(f)
168
- stored_time = stored[:time].to_i
169
- end
170
- $log.info "deskcom: Load #{@store_file}: #{@stored_time}"
171
- rescue => e
172
- $log.warn "deskcom: Can't load store_file #{e.message}"
173
- return 0
173
+ def load_store_file(store_file)
174
+ f = Pathname.new(store_file)
175
+ stored_time = 0
176
+ f.open('r') do |f|
177
+ stored = YAML.load_file(f)
178
+ stored_time = stored[:time].to_i
174
179
  end
180
+ $log.info "deskcom: Load #{store_file}: #{stored_time}"
175
181
  return stored_time
182
+ rescue => e
183
+ $log.warn "deskcom: Can't load store_file #{e.message}"
184
+ return 0
176
185
  end
177
186
 
178
- def save_store_file
179
- begin
180
- f = Pathname.new(@store_file)
181
- f.open('w') do |f|
182
- data = {:time => @started_time}
183
- YAML.dump(data, f)
184
- end
185
- $log.info "deskcom: Save started_time: #{@started_time} to #{@store_file}"
186
- rescue => e
187
- $log.warn "deskcom: Can't save store_file #{e.message}"
187
+ def save_store_file(store_file, time)
188
+ f = Pathname.new(store_file)
189
+ f.open('w') do |f|
190
+ data = {:time => time}
191
+ YAML.dump(data, f)
188
192
  end
193
+ $log.info "deskcom: Save started_time: #{time} to #{store_file}"
194
+ rescue => e
195
+ $log.warn "deskcom: Can't save store_file #{e.message}"
189
196
  end
190
197
 
191
198
  end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-deskcom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toru Takahashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-19 00:00:00.000000000 Z
11
+ date: 2015-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: fluentd
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: desk
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: fluent Input plugin to collect data from Deskcom.
@@ -73,7 +73,7 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
- - .gitignore
76
+ - ".gitignore"
77
77
  - Gemfile
78
78
  - LICENSE.txt
79
79
  - README.md
@@ -92,17 +92,17 @@ require_paths:
92
92
  - lib
93
93
  required_ruby_version: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - '>='
95
+ - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - '>='
100
+ - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  requirements: []
104
104
  rubyforge_project:
105
- rubygems_version: 2.0.14
105
+ rubygems_version: 2.2.2
106
106
  signing_key:
107
107
  specification_version: 4
108
108
  summary: Input plugin to collect data from Deskcom.