aliyun_sls 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f99113f595c413af76c9c28a15fb4de46bd70b44
4
- data.tar.gz: d79c1946dee0ab4a053aadae36cb43f3eed1ec05
3
+ metadata.gz: a8f3884c68b68d0dc9a0ffbb3b5873c186c5948c
4
+ data.tar.gz: 9adba5c42ec2db13887bcfcbad94ae7508aec135
5
5
  SHA512:
6
- metadata.gz: 953ab3e11bc74648c3bcdf51e64ab6e3b95901bc09e154ee02f1fb1bfd26ba92da1379c9f1d28234ef103aa3137f9ab56920cd5b2ee05a321870d8d9a3390761
7
- data.tar.gz: f8ac4988f9eea5905c4aa3edafc8c4ade033b65742f5a05242ad01f84ee6ac0cdd40613336d445684cb35e531300f70b380cdfe039e31d79dd9b17782131c2ea
6
+ metadata.gz: 14f9c36c56120debc5ebc4c959b1872065f006cc1e4f1c742a48e5cd485a875521bc7bb568c6e7b1884eaf089298ceee8f50eb0cac963eee4fc017d19f0666d4
7
+ data.tar.gz: 64d18c6e4725a6cd3af8ca246b0f646c146bd755a6957fde897ad991fa90ad055754895b433d6fdce5aec0a754f03b56768bffa2bf3ba9a825827d7611ae5b09
data/.gitignore CHANGED
File without changes
data/Gemfile CHANGED
File without changes
data/LICENSE.txt CHANGED
File without changes
data/README.md CHANGED
@@ -2,19 +2,21 @@
2
2
 
3
3
  ## 阿里云SLS服务Ruby SDK
4
4
 
5
- 简单日志服务(Simple Log Service,简称SLS)是针对日志收集、存储和查询的平台化服务。服务提供各种类型日志的实时收集,平台化存储及实时查询海量的日志。并可以将日志归档至ODPS,以利用ODPS做大数据分析。除了通过管理控制台操作,SLS还提供了API(Application Programming Interface)方式写入、查询日志数据,管理自己的项目及日志库等。
5
+
6
+ #### 简单日志服务(`Simple Log Service,简称SLS`)
7
+ 是针对日志收集、存储和查询的平台化服务。服务提供各种类型日志的实时收集,平台化存储及实时查询海量的日志。并可以将日志归档至ODPS,以利用ODPS做大数据分析。除了通过管理控制台操作,SLS还提供了API(Application Programming Interface)方式写入、查询日志数据,管理自己的项目及日志库等。
6
8
 
7
9
  #### SLS(简单日志服务)[介绍](http://docs.aliyun.com/?spm=5176.730001.3.10.5GpxDL#/sls)
8
10
 
9
11
  ------------
10
12
  ## 库用法
11
13
 
12
- ### 查询Store清单(ListLogstores)
14
+ ### [查询Store清单](http://docs.aliyun.com/#/pub/sls/api/apilist&ListLogstores)
13
15
 
14
16
  con = AliyunSls::Connection.new("project", "region", "access_key_secret", "aliyun_access_key")
15
17
  con.list_logstores
16
18
 
17
- ### 上传日志(PutLogs)
19
+ ### [上传日志](http://docs.aliyun.com/#/pub/sls/api/apilist&PutLogs)
18
20
 
19
21
  log = AliyunSls::Protobuf::Log.new(:time => Time.now.to_i, :contents => [])
20
22
 
@@ -35,11 +37,45 @@
35
37
  con = AliyunSls::Connection.new("project", "region", "access_key_secret", "aliyun_access_key")
36
38
  con.puts_logs("store", log_list)
37
39
 
38
- ### TODO
39
-
40
- - `ListTopics` 列出Logstore中的日志主题。
41
- - `GetHistograms` 查询Logstore中的日志在时间轴上的分布。
42
- - `GetLogs` 查询Logstore中的日志数据。
40
+ ### [列出日志主题](http://docs.aliyun.com/#/pub/sls/api/apilist&ListTopics)
41
+
42
+ con.list_topics("store")
43
+
44
+ |名称| 类型| 必选| 描述|
45
+ |-----|-----|----|-----|
46
+ |logstorename| 字符串| 是| 需要查询的Logstore名称。|
47
+ |type| 字符串| 是| 查询Logstore数据的类型,在ListTopics接口中该参数必须为"topic"。|
48
+ |line| 整型| 否| 请求一次返回的Topic最大数目。取值范围为0~100,默认值为100。|
49
+ |token| 字符串| 否| 请求返回Topic的起始点(按字典序)。默认值为空字符串,表示从头开始查询 |Logstore中的日志Topic。
50
+
51
+ ### [查询Logstore中的日志在时间轴上的分布](http://docs.aliyun.com/#/pub/sls/api/apilist&GetHistograms)
52
+
53
+ con.get_histograms("store")
54
+
55
+ |名称| 类型| 必选| 描述|
56
+ |----|----|------|------|
57
+ |logstorename| 字符串| 是| 需要查询日志的Logstore名称。|
58
+ |type| 字符串| 是| 查询Logstore数据的类型,在GetHistograms接口中该参数必须为"histogram"。|
59
+ |from| 整型| 是| 查询开始时间点(精度为秒,从1970-1-1 00:00:00 UTC计算起的秒数)。|
60
+ |to| 整型| 是| 查询结束时间点(精度为秒,从1970-1-1 00:00:00 UTC计算起的秒数)。|
61
+ |topic| 字符串| 否| 查询日志主题。|
62
+ |query| 字符串| 否| 查询表达式。关于查询表达式的详细语法请参考查询语法。|
63
+
64
+ ### [查询Logstore中的日志数据](http://docs.aliyun.com/#/pub/sls/api/apilist&GetLogs)
65
+
66
+ con.get_logs("store", :topic => "xxx")
67
+
68
+ |名称 | 类型| 必选| 描述|
69
+ |---|---|---||
70
+ |logstorename | 字符串| 是| 需要查询日志的Logstore名称。|
71
+ |type | 字符串| 是| 查询Logstore数据的类型,在GetLogs接口中该参数必须为"log"。|
72
+ |from | 整型| 是| 查询开始时间点(精度为秒,从1970-1-1 00:00:00 UTC计算起的秒数)。|
73
+ |to | 整型| 是| 查询结束时间点(精度为秒,从1970-1-1 00:00:00 UTC计算起的秒数)。|
74
+ |topic | 字符串| 否| 查询日志主题。|
75
+ |query | 字符串| 否| 查询表达式。关于查询表达式的详细语法请参考查询语法。|
76
+ |line | 整型| 否| 请求返回的最大日志条数。取值范围0~100,默认值为100。|
77
+ |offset | 整型| 否| 请求返回日志的起始点。取值范围0或正整数,默认值0。|
78
+ |reverse | 布尔型| 否| 是否按日志时间戳逆序返回日志。true表示逆序,false表示顺序,默认值为false。|
43
79
 
44
80
  ## 命令行用法
45
81
 
data/Rakefile CHANGED
File without changes
data/aliyun_sls.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency "beefcake"
25
25
  spec.add_dependency "file-tail"
26
26
  spec.add_dependency "ruby-hmac"
27
+ spec.add_dependency "addressable"
27
28
  end
@@ -1,7 +1,11 @@
1
+ require "addressable/uri"
1
2
  require 'rest_client'
2
3
  require 'hmac-sha1'
3
4
  require "base64"
4
5
  require "zlib"
6
+ require "time"
7
+
8
+ require "byebug"
5
9
 
6
10
  # log = AliyunSls::Protobuf::Log.new(:time => Time.now.to_i, :contents => [])
7
11
 
@@ -43,6 +47,90 @@ module AliyunSls
43
47
  @host = "#{project}.#{region}"
44
48
  end
45
49
 
50
+ # http://docs.aliyun.com/#/pub/sls/api/apilist&PutLogs
51
+ def puts_logs(logstorename, content)
52
+ # 压缩content数据
53
+ compressed = Zlib::Deflate.deflate(content.encode.to_s)
54
+ headers = compact_headers(content, compressed)
55
+ headers["Authorization"] = signature("POST", logstorename, headers, content, {})
56
+
57
+ u = URI.parse("http://#{@host}/logstores/#{logstorename}")
58
+ rsp = RestClient.post u.to_s, compressed, headers
59
+ parse_response(rsp)
60
+ end
61
+
62
+ # http://docs.aliyun.com/#/pub/sls/api/apilist&ListLogstores
63
+ def list_logstores
64
+ headers = compact_headers(nil, nil)
65
+ headers["Authorization"] = signature("GET", nil, headers, nil, {})
66
+
67
+ u = URI.parse("http://#{@host}/logstores")
68
+ headers["Referer"] = u.to_s
69
+ rsp = RestClient.get u.to_s, headers
70
+ parse_response(rsp)
71
+ end
72
+
73
+ # http://docs.aliyun.com/#/pub/sls/api/apilist&GetLogs
74
+ def get_logs(logstorename, opts={})
75
+ default_opts = {
76
+ :type => "log",
77
+ :from => Time.now.to_i - 60*5,#默认是五分钟前
78
+ :to => Time.now.to_i,
79
+ :line => 100,
80
+ :offset => 0,
81
+ :reverse => false
82
+ }
83
+ opts = default_opts.update opts
84
+ headers = compact_headers(nil, nil)
85
+ headers["Authorization"] = signature("GET", logstorename, headers, nil, opts)
86
+
87
+ u = Addressable::URI.parse("http://#{@host}/logstores/#{logstorename}")
88
+ headers["Referer"] = u.to_s
89
+ u.query_values = opts
90
+ rsp = RestClient.get u.to_s, headers
91
+ parse_response(rsp)
92
+ end
93
+
94
+ # http://docs.aliyun.com/#/pub/sls/api/apilist&ListTopics
95
+ def list_topics(logstorename, opts={})
96
+ default_opts = {
97
+ :type => "topic",
98
+ :line => 100,
99
+ :toke => ""
100
+ }
101
+ opts = default_opts.update opts
102
+ headers = compact_headers(nil, nil)
103
+ headers["Authorization"] = signature("GET", logstorename, headers, nil, opts)
104
+
105
+ u = Addressable::URI.parse("http://#{@host}/logstores/#{logstorename}")
106
+ headers["Referer"] = u.to_s
107
+ u.query_values = opts
108
+ rsp = RestClient.get u.to_s, headers
109
+ parse_response(rsp)
110
+ end
111
+
112
+ # http://docs.aliyun.com/#/pub/sls/api/apilist&GetHistograms
113
+ def get_histograms(logstorename, opts={})
114
+ default_opts = {
115
+ :type => "histogram",
116
+ :from => Time.now.to_i - 60*5,#默认是五分钟前
117
+ :to => Time.now.to_i,
118
+ :topic => "",
119
+ :query => 0,
120
+ }
121
+ opts = default_opts.update opts
122
+ headers = compact_headers(nil, nil)
123
+ headers["Authorization"] = signature("GET", logstorename, headers, nil, opts)
124
+
125
+ u = Addressable::URI.parse("http://#{@host}/logstores/#{logstorename}")
126
+ headers["Referer"] = u.to_s
127
+ u.query_values = opts
128
+ rsp = RestClient.get u.to_s, headers
129
+ parse_response(rsp)
130
+ end
131
+
132
+ private
133
+
46
134
  def string_to_sign(verb, logstorename, headers, content, query={})
47
135
  if content
48
136
  string_to_sign_with_content(verb, logstorename, headers, query)
@@ -96,9 +184,9 @@ DOC
96
184
  # 2. 放入要访问的SLS资源:"/logstores/logstorename"(无logstorename则不填);
97
185
  # 3. 如请求包含查询字符串(QUERY_STRING),则在CanonicalizedResource字符串尾部添加“?”和查询字符串。
98
186
  def canonicalized_resource(logstorename, query={})
99
- u = logstorename ? URI.parse("/logstores/#{logstorename}") : URI.parse("/logstores")
187
+ u = logstorename ? Addressable::URI.parse("/logstores/#{logstorename}") : Addressable::URI.parse("/logstores")
100
188
  if query.size != 0
101
- u.query = query.inject([]){|s, a| s << "#{a[0]}=#{a[1]}"}.join('&')
189
+ u.query_values = query
102
190
  end
103
191
  u.to_s
104
192
  end
@@ -135,27 +223,6 @@ DOC
135
223
  headers
136
224
  end
137
225
 
138
- def puts_logs(logstorename, content)
139
- # 压缩content数据
140
- compressed = Zlib::Deflate.deflate(content.encode.to_s)
141
- headers = compact_headers(content, compressed)
142
- headers["Authorization"] = signature("POST", logstorename, headers, content, {})
143
-
144
- u = URI.parse("http://#{@host}/logstores/#{logstorename}")
145
- rsp = RestClient.post u.to_s, compressed, headers
146
- parse_response(rsp)
147
- end
148
-
149
- def list_logstores
150
- headers = compact_headers(nil, nil)
151
- headers["Authorization"] = signature("GET", nil, headers, nil, {})
152
-
153
- u = URI.parse("http://#{@host}/logstores")
154
- headers["Referer"] = u.to_s
155
- rsp = RestClient.get u.to_s, headers
156
- parse_response(rsp)
157
- end
158
-
159
226
  def parse_response(rsp)
160
227
  # 如果返回结果报错,则解析报错内容打印到日志中
161
228
  if rsp.code.to_s =~ /[4|5]\d\d/
@@ -166,6 +233,7 @@ DOC
166
233
  puts msg
167
234
  end
168
235
  end
236
+ rsp
169
237
  end
170
238
  end
171
239
  end
File without changes
@@ -1,3 +1,3 @@
1
1
  module AliyunSls
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/aliyun_sls.rb CHANGED
File without changes
metadata CHANGED
@@ -1,97 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aliyun_sls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - cuizheng
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-14 00:00:00.000000000 Z
11
+ date: 2015-06-05 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.3'
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.3'
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: '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: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rest-client
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: beefcake
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
  - !ruby/object:Gem::Dependency
70
70
  name: file-tail
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: ruby-hmac
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: addressable
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  description: Gem for SLS of Aliyun
@@ -102,7 +116,7 @@ executables:
102
116
  extensions: []
103
117
  extra_rdoc_files: []
104
118
  files:
105
- - .gitignore
119
+ - ".gitignore"
106
120
  - Gemfile
107
121
  - LICENSE.txt
108
122
  - README.md
@@ -123,19 +137,18 @@ require_paths:
123
137
  - lib
124
138
  required_ruby_version: !ruby/object:Gem::Requirement
125
139
  requirements:
126
- - - '>='
140
+ - - ">="
127
141
  - !ruby/object:Gem::Version
128
142
  version: '0'
129
143
  required_rubygems_version: !ruby/object:Gem::Requirement
130
144
  requirements:
131
- - - '>='
145
+ - - ">="
132
146
  - !ruby/object:Gem::Version
133
147
  version: '0'
134
148
  requirements: []
135
149
  rubyforge_project:
136
- rubygems_version: 2.0.6
150
+ rubygems_version: 2.2.2
137
151
  signing_key:
138
152
  specification_version: 4
139
153
  summary: Gem for SLS of Aliyun
140
154
  test_files: []
141
- has_rdoc: