aliyun_sls_ruby3_sdk 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0ec561524a7d40e85027eec5ffe0fed7610fd67c37e1751404431e65b7509040
4
+ data.tar.gz: bfc24e733a4033c6c03971d901011f964c54da52e75c8f16b81799f9102bc0f4
5
+ SHA512:
6
+ metadata.gz: b51baf927d0b6e6f1f7a0d89bb96818768f5587ac8f65ba4a6d3efb586712433a19e4966ebc596a218429cdcc6ac5eec1c4c8c5e3ecb7ec12d34e5b67511d17e
7
+ data.tar.gz: f45b887e4e13664d96e3ecd00429db8f5eb20e6f89718e55bbe5638ef571734bb547d6ffbfe90ef6a98923569f5efdf0ed83e24c54a17ef0a66555f9abcab557
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in aliyun_sls_sdk.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 cuizheng
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,122 @@
1
+ # AliyunSls
2
+
3
+ ## 阿里云SLS服务Ruby SDK
4
+
5
+
6
+ https://cn.aliyun.com/product/sls
7
+
8
+ ------------
9
+ ## 库用法
10
+
11
+ ### [查询Store清单](http://docs.aliyun.com/#/pub/sls/api/apilist&ListLogstores)
12
+
13
+ ```
14
+ endpoint = ''
15
+ project = ''
16
+ access_key_secret = ''
17
+ aliyun_access_key = ''
18
+ logstore = ''
19
+ conn = AliyunSlsSdk::LogClient.new(endpoint, access_key_secret, aliyun_access_key)
20
+ conn.get_logstore(project, logstore)
21
+ ```
22
+
23
+ ### [上传日志](http://docs.aliyun.com/#/pub/sls/api/apilist&PutLogs)
24
+ ```
25
+ endpoint = ''
26
+ project = ''
27
+ access_key_secret = ''
28
+ aliyun_access_key = ''
29
+ logstore = ''
30
+ conn = AliyunSlsSdk::LogClient.new(endpoint, access_key_secret, aliyun_access_key)
31
+
32
+
33
+ topic=nil
34
+ source=nil
35
+ logitems = [{timestamp: Time.now.to_i, contents: [['aaa', '111'], ['ccc', 222]]}]
36
+ hashKey = nil
37
+ compress = false
38
+
39
+ logs = AliyunSlsSdk::PutLogsRequest.new(project, logstore, topic, source, logitems, hashKey, compress)
40
+
41
+ conn.put_logs(logs)
42
+ ```
43
+
44
+ ### [列出日志主题](http://docs.aliyun.com/#/pub/sls/api/apilist&ListTopics)
45
+
46
+ con.list_topics("store")
47
+
48
+ |名称| 类型| 必选| 描述|
49
+ |-----|-----|----|-----|
50
+ |logstorename| 字符串| 是| 需要查询的Logstore名称。|
51
+ |type| 字符串| 是| 查询Logstore数据的类型,在ListTopics接口中该参数必须为"topic"。|
52
+ |line| 整型| 否| 请求一次返回的Topic最大数目。取值范围为0~100,默认值为100。|
53
+ |token| 字符串| 否| 请求返回Topic的起始点(按字典序)。默认值为空字符串,表示从头开始查询 |Logstore中的日志Topic。
54
+
55
+ ### [查询Logstore中的日志在时间轴上的分布](http://docs.aliyun.com/#/pub/sls/api/apilist&GetHistograms)
56
+
57
+ con.get_histograms("store")
58
+
59
+ |名称| 类型| 必选| 描述|
60
+ |----|----|------|------|
61
+ |logstorename| 字符串| 是| 需要查询日志的Logstore名称。|
62
+ |type| 字符串| 是| 查询Logstore数据的类型,在GetHistograms接口中该参数必须为"histogram"。|
63
+ |from| 整型| 是| 查询开始时间点(精度为秒,从1970-1-1 00:00:00 UTC计算起的秒数)。|
64
+ |to| 整型| 是| 查询结束时间点(精度为秒,从1970-1-1 00:00:00 UTC计算起的秒数)。|
65
+ |topic| 字符串| 否| 查询日志主题。|
66
+ |query| 字符串| 否| 查询表达式。关于查询表达式的详细语法请参考查询语法。|
67
+
68
+ ### [查询Logstore中的日志数据](http://docs.aliyun.com/#/pub/sls/api/apilist&GetLogs)
69
+
70
+ con.get_logs("store", :topic => "xxx")
71
+
72
+ |名称 | 类型| 必选| 描述|
73
+ |---|---|---|------------|
74
+ |logstorename | 字符串| 是| 需要查询日志的Logstore名称。|
75
+ |type | 字符串| 是| 查询Logstore数据的类型,在GetLogs接口中该参数必须为"log"。|
76
+ |from | 整型| 是| 查询开始时间点(精度为秒,从1970-1-1 00:00:00 UTC计算起的秒数)。|
77
+ |to | 整型| 是| 查询结束时间点(精度为秒,从1970-1-1 00:00:00 UTC计算起的秒数)。|
78
+ |topic | 字符串| 否| 查询日志主题。|
79
+ |query | 字符串| 否| 查询表达式。关于查询表达式的详细语法请参考查询语法。|
80
+ |line | 整型| 否| 请求返回的最大日志条数。取值范围0~100,默认值为100。|
81
+ |offset | 整型| 否| 请求返回日志的起始点。取值范围0或正整数,默认值0。|
82
+ |reverse | 布尔型| 否| 是否按日志时间戳逆序返回日志。true表示逆序,false表示顺序,默认值为false。|
83
+
84
+ ## 命令行用法
85
+
86
+ 1. 生成配置文件
87
+ 2. `PROJECT=[PROJECT] REGION=[REGION] SECRET=[SECRET] KEY=[KEY] sls setup`
88
+ 1. 执行上传日志操作
89
+ 2. `[PROJECT=[PROJECT]] sls put log_path store [topic]`
90
+ 2. 上传日志操作是使用Tail方式执行,有增量日志产生的时候,会自动收集增量部分上传到阿里云
91
+
92
+ ## fluentd-plugin-sls
93
+
94
+ 可以结合fluentd,将日志解析好之后上传到阿里云上,实现日志的统一存储。
95
+
96
+ `gist`地址:`https://gist.github.com/charlescui/d2a231dbc85b11586fa0`
97
+
98
+ ## Installation
99
+
100
+ Add this line to your application's Gemfile:
101
+
102
+ gem 'aliyun_sls_sdk'
103
+
104
+ And then execute:
105
+
106
+ $ bundle
107
+
108
+ Or install it yourself as:
109
+
110
+ $ gem install aliyun_sls_sdk
111
+
112
+ ## Usage
113
+
114
+ TODO: Write usage instructions here
115
+
116
+ ## Contributing
117
+
118
+ 1. Fork it
119
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
120
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
121
+ 4. Push to the branch (`git push origin my-new-feature`)
122
+ 5. Create new Pull Request
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'aliyun_sls_sdk/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "aliyun_sls_ruby3_sdk"
8
+ spec.version = AliyunSlsSdk::VERSION
9
+ spec.authors = ["langyong135"]
10
+ spec.email = ["langyong135@gmail.com"]
11
+ spec.description = %q{Gem for SDK of SLS of Aliyun}
12
+ spec.summary = %q{Gem for SDK of SLS of Aliyun, use it at your own risk}
13
+ spec.homepage = "https://help.aliyun.com/product/28958.html"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "rake", "~> 0"
22
+ spec.add_dependency "beefcake", "~> 1.2"
23
+ spec.add_dependency "file-tail", "~> 0"
24
+ spec.add_dependency "ruby-hmac", "~> 0"
25
+ spec.add_dependency "addressable", "~> 2.5"
26
+ spec.add_dependency "net-http-persistent", "~> 4.0.2"
27
+ end
@@ -0,0 +1,15 @@
1
+ require 'json'
2
+
3
+ module AliyunSlsSdk
4
+ class CreateLogStoreResponse < LogResponse
5
+
6
+ def initialize(header)
7
+ super(header)
8
+ end
9
+
10
+ def log_print()
11
+ puts 'CreateLogStoreResponse:'
12
+ puts 'headers:' + self.all_headers.to_json
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ module AliyunSlsSdk
2
+ class GetLogRequest < LogRequest
3
+ attr_accessor :project, :logstore, :fromTime, :toTime, :topic, :query, :line, :offset, :reverse
4
+ def initialize(project=nil, logstore=nil, fromTime=nil, toTime=nil, topic=nil,
5
+ query=nil, line=nil, offset=nil, reverse=nil)
6
+ @project = project
7
+ @logstore = logstore
8
+ @fromTime = fromTime
9
+ @toTime = toTime
10
+ @topic = topic
11
+ @query = query
12
+ @line = line
13
+ @offset = offset
14
+ @reverse = reverse
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module AliyunSlsSdk
2
+ class GetLogStoreResponse < LogResponse
3
+
4
+ attr_accessor :ttl, :shard_count, :logstore_name
5
+ def initialize(resp, header)
6
+ super(header)
7
+ puts resp
8
+ @logstore_name = resp["logstoreName"]
9
+ @ttl = resp["ttl"] ? resp["ttl"].to_i : 0
10
+ @shard_count = resp["shardCount"] ? resp["shardCount"].to_i : 0
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,196 @@
1
+ require "time"
2
+ require "addressable/uri"
3
+ require "net/http/persistent"
4
+ require "json"
5
+
6
+ module AliyunSlsSdk
7
+ class LogClient
8
+
9
+ attr_reader :http
10
+
11
+ @@API_VERSION = "0.6.0"
12
+ @@USER_AGENT = "log-ruby-sdk-v-0.6.1"
13
+ def initialize(endpoint, accessKeyId, accessKeySecret, ssl_verify = false)
14
+ @endpoint = endpoint
15
+ @accessKeyId = accessKeyId
16
+ @accessKeySecret = accessKeySecret
17
+ @ssl_verify = ssl_verify
18
+ @http = Net::HTTP::Persistent.new
19
+ end
20
+
21
+ def get_logstore(project_name, logstore_name)
22
+ headers = {}
23
+ params = {}
24
+ resource = "/logstores/" + logstore_name
25
+ resp, header = send("GET", project_name, nil, resource, params, headers)
26
+ return GetLogStoreResponse.new(resp, header)
27
+ end
28
+
29
+
30
+ def create_logstore(project_name, logstore_name, ttl, shard_count)
31
+ headers = {}
32
+ params = {}
33
+ headers["x-log-bodyrawsize"] = '0'
34
+ headers["Content-Type"] = "application/json"
35
+ resource = "/logstores"
36
+ body = {}
37
+ body["logstoreName"] = logstore_name.encode("utf-8");
38
+ body["ttl"] = ttl;
39
+ body["shardCount"] = shard_count;
40
+ body_str = body.to_json;
41
+ resp, header = send("POST", project_name, body_str, resource, params, headers)
42
+ return CreateLogStoreResponse.new(header)
43
+ end
44
+
45
+
46
+ def get_logs()
47
+
48
+ end
49
+
50
+ # 这里接受参数
51
+ # (project=nil, logstore=nil, topic=nil, source=nil, logitems=nil, hashKey = nil, compress = false)
52
+ # 其中 logitems = [{timestamp: Time.now.to_i, contents: [['aaa', '111'], ['ccc', 222]]}]
53
+ #
54
+ def put_logs(request)
55
+ if request.logitems.length > 4096
56
+ raise AliyunSlsSdk::PostBodyTooLarge, "log item is larger than 4096"
57
+ end
58
+ logGroup = Protobuf::LogGroup.new(:logs => [])
59
+ logGroup.topic = request.topic
60
+ logGroup.source = request.source
61
+ request.logitems.each { |logitem|
62
+ # log = Protobuf::Log.new(:time => logitem.timestamp, :contents => [])
63
+ # logGroup.logs << log
64
+ # contents = logitem.contents
65
+ # contents.each { |k, v|
66
+ # content = Protobuf::Log::Content.new(:key => k, :value => v)
67
+ # log.contents << content
68
+ # }
69
+ log = Protobuf::Log.new(:time => logitem.timestamp, :contents => [])
70
+
71
+ contents = logitem.contents
72
+ contents.each { |detail|
73
+ content = Protobuf::Log::Content.new(:key => detail[0], :value => detail[1])
74
+ log.contents << content
75
+ }
76
+ logGroup.logs << log
77
+
78
+ }
79
+ body = logGroup.encode.to_s
80
+ if body.length > 3 * 1024 * 1024
81
+ raise AliyunSlsSdk::PostBodyTooLarge, "content length is larger than 3MB"
82
+ end
83
+ headers = {}
84
+ headers['x-log-bodyrawsize'] = body.length.to_s
85
+ headers['Content-Type'] = 'application/x-protobuf'
86
+ is_compress = request.compress
87
+
88
+ compress_data = nil
89
+ if is_compress
90
+ headers['x-log-compresstype'] = 'deflate'
91
+ compress_data = Zlib::Deflate.deflate(body)
92
+
93
+ end
94
+ params = {}
95
+ logstore = request.logstore
96
+ project = request.project
97
+ resource = '/logstores/' + logstore
98
+ if request.hashkey
99
+ resource = '/logstores/' + logstore+"/shards/route"
100
+ params["key"] = request.hashkey
101
+ else
102
+ resource = '/logstores/' + logstore+"/shards/lb"
103
+ end
104
+
105
+ respHeaders = nil
106
+ if is_compress
107
+ respHeaders = send('POST', project, compress_data, resource, params, headers)
108
+ else
109
+ respHeaders = send('POST', project, body, resource, params, headers)
110
+ end
111
+ return PutLogsResponse.new(respHeaders[1])
112
+
113
+ end
114
+
115
+
116
+
117
+ private
118
+ def send(method, project, body, resource, params, headers, respons_body_type ='json')
119
+ if body
120
+ headers['Content-Length'] = body.bytesize.to_s
121
+ headers['Content-MD5'] = Util.cal_md5(body)
122
+ else
123
+ headers['Content-Length'] = '0'
124
+ headers["x-log-bodyrawsize"] = '0'
125
+ end
126
+ headers['x-log-apiversion'] = @@API_VERSION
127
+ headers['x-log-signaturemethod'] = 'hmac-sha1'
128
+ scheme = @ssl_verify ? "https" : "http"
129
+ url = "#{scheme}://" + project + "." + @endpoint
130
+ headers['Host'] = project + "." + @endpoint
131
+ headers['Date'] = headers["Date"] = DateTime.now.httpdate
132
+ signature = Util.get_request_authorization(method, resource,
133
+ @accessKeySecret, params, headers)
134
+ headers['Authorization'] = "LOG " + @accessKeyId + ':' + signature
135
+ url = url + resource
136
+ return sendRequest(method, url, params, body, headers, respons_body_type)
137
+ end
138
+
139
+ def loadJson(respText, requestId)
140
+ if respText.empty?
141
+ return nil
142
+ else
143
+ begin
144
+ return JSON.parse(respText)
145
+ rescue JSON::ParserError => e
146
+ raise LogException.new("BadResponse", "Bad json format:\n#{respText}", requestId)
147
+ end
148
+ end
149
+ end
150
+
151
+ def sendRequest(method, url, params, body, headers, respons_body_type = 'json')
152
+ statusCode, respBody, respHeaders = getHttpResponse(method, url, params, body, headers)
153
+ if respHeaders['x-log-requestid']
154
+ requestId = respHeaders['x-log-requestid']
155
+ else
156
+ requestId = ''
157
+ end
158
+
159
+ if statusCode == '200'
160
+ if respons_body_type == 'json'
161
+ return loadJson(respBody, requestId), respHeaders
162
+ else
163
+ return respBody, respHeaders
164
+ end
165
+ end
166
+ respJson = loadJson(respBody, requestId)
167
+ if respJson["errorCode"] and respJson["errorMessage"]
168
+ raise LogException.new(respJson["errorCode"], respJson["errorMessage"], requestId)
169
+ else
170
+ exStr = ""
171
+ if respBody
172
+ exStr = ". Return Json is #{respBody}"
173
+ else
174
+ exStr = "."
175
+ end
176
+ raise LogException.new("LogRequestError", "Request is failed. Http code is #{statusCode} #{exStr}", requestId)
177
+ end
178
+ end
179
+
180
+ def getHttpResponse(method, url, params, body, headers)
181
+ headers['User-Agent'] = @@USER_AGENT
182
+ r = nil
183
+ uri = Addressable::URI.parse(url)
184
+ uri.query_values = params
185
+ methodRequest = nil
186
+ if method.downcase == 'get'
187
+ methodRequest = Net::HTTP::Get.new(uri.request_uri, headers)
188
+ elsif method.downcase == 'post'
189
+ methodRequest = Net::HTTP::Post.new(uri.request_uri, headers)
190
+ methodRequest.body = body
191
+ end
192
+ response = @http.request uri, methodRequest
193
+ return response.code, response.body, response.to_hash
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,15 @@
1
+
2
+ module AliyunSlsSdk
3
+ class LogException < StandardError
4
+ attr_accessor :errorCode, :errorMessage, :requestId
5
+ def initialize(errorCode, errorMessage, requestId)
6
+ @errorCode = errorCode
7
+ @errorMessage = errorMessage
8
+ @requestId = requestId
9
+ end
10
+
11
+ def to_s()
12
+ "LogException: \n{\n ErrorCode: #{@errorCode}\n ErrorMessage: #{@errorMessage}\n RequestId: #{@requestId}\n}\n"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ require "time"
2
+
3
+ module AliyunSlsSdk
4
+ class LogItem
5
+
6
+ attr_accessor :timestamp, :contents
7
+ # contents is a hash
8
+ def initialize(timestamp, contents)
9
+ if not timestamp
10
+ @timestamp = Time.now.to_i
11
+ end
12
+ @contents = contents
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,8 @@
1
+ module AliyunSlsSdk
2
+ class LogRequest
3
+ attr_accessor :project
4
+ def initialize(projectName)
5
+ @project = projectName
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ module AliyunSlsSdk
2
+ class LogResponse
3
+ attr_accessor :request_id,:all_headers
4
+
5
+ def initialize(headers)
6
+ @all_headers = headers
7
+ if headers['x-log-requestid']
8
+ @request_id = headers['x-log-requestid']
9
+ end
10
+ @request_id = ''
11
+ end
12
+
13
+ def get_header(key)
14
+ return @all_headers[key]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,50 @@
1
+ require 'beefcake'
2
+
3
+ module AliyunSlsSdk
4
+ module Protobuf
5
+
6
+ # message Log
7
+ # {
8
+ # required uint32 time = 1; // UNIX Time Format
9
+ # message Content
10
+ # {
11
+ # required string key = 1;
12
+ # required string value = 2;
13
+ # }
14
+ # repeated Content contents= 2;
15
+ # }
16
+
17
+ # message LogGroup
18
+ # {
19
+ # repeated Log logs= 1;
20
+ # optional string reserved =2; // 内部字段,不需要填写
21
+ # optional string topic = 3;
22
+ # optional string source = 4;
23
+ # }
24
+
25
+ class Log
26
+ include Beefcake::Message
27
+
28
+ required :time, :uint32, 1
29
+
30
+ class Content
31
+ include Beefcake::Message
32
+
33
+ required :key, :string, 1
34
+ required :value, :string, 2
35
+ end
36
+
37
+ repeated :contents, Content, 2
38
+ end
39
+
40
+ class LogGroup
41
+ include Beefcake::Message
42
+
43
+ repeated :logs, Log, 1
44
+ optional :reserved, :string, 2
45
+ optional :topic, :string, 3
46
+ optional :source, :string, 4
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,15 @@
1
+
2
+ module AliyunSlsSdk
3
+ class PutLogsRequest < LogRequest
4
+ attr_accessor :project, :logstore, :topic, :source, :logitems, :hashkey, :compress
5
+ def initialize(project=nil, logstore=nil, topic=nil, source=nil, logitems=nil, hashKey = nil, compress = false)
6
+ @project = project
7
+ @logstore = logstore
8
+ @topic = topic
9
+ @source = source
10
+ @logitems = logitems
11
+ @hashkey = hashKey
12
+ @compress = compress
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+
2
+ module AliyunSlsSdk
3
+ class PutLogsResponse < LogResponse
4
+ end
5
+ end
@@ -0,0 +1,67 @@
1
+ require "uri"
2
+ require "base64"
3
+ require "zlib"
4
+ require "hmac-sha1"
5
+
6
+
7
+ module AliyunSlsSdk
8
+ class Util
9
+ def self.compress_data(data)
10
+ Zlib::Deflate.deflate(data, 6)
11
+ end
12
+
13
+ def self.cal_md5(content)
14
+ Digest::MD5.hexdigest(content).upcase
15
+ end
16
+
17
+ def self.hmac_sha1(content, key)
18
+ Base64.encode64((HMAC::SHA1.new(key) << content).digest).rstrip()
19
+ end
20
+
21
+ def self.canonicalized_log_headers(headers)
22
+ h = {}
23
+ headers.each { |k, v|
24
+ if k =~ /x-log-.*/ or k =~ /x-acs-.*/
25
+ h[k.downcase] = v
26
+ end
27
+ }
28
+ h.keys.sort.map { |e|
29
+ "#{e}:#{h[e].gsub(/^\s+/, '')}"
30
+ }.join($/) + $/
31
+ end
32
+
33
+ def self.url_encode(params)
34
+ # todo
35
+ end
36
+
37
+ def self.canonicalized_resource(resource, params)
38
+ if not params.empty?
39
+ urlString = params.keys.sort.map { |k|
40
+ "#{k}=#{params[k]}"
41
+ }.join('&')
42
+ return resource+"?"+urlString
43
+ else
44
+ return resource
45
+ end
46
+ end
47
+
48
+ def self.get_request_authorization(method, resource, key, params, headers)
49
+ if not key
50
+ return ''
51
+ end
52
+ content = method + "\n"
53
+ if headers['Content-MD5']
54
+ content += headers['Content-MD5']
55
+ end
56
+ content += "\n"
57
+ if headers['Content-Type']
58
+ content += headers['Content-Type']
59
+ end
60
+ content += "\n"
61
+ content += headers['Date']+"\n"
62
+ content += Util.canonicalized_log_headers(headers)
63
+ content += Util.canonicalized_resource(resource, params)
64
+ return Util.hmac_sha1(content, key)
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,3 @@
1
+ module AliyunSlsSdk
2
+ VERSION = "0.10.0"
3
+ end
@@ -0,0 +1,30 @@
1
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'version.rb')
2
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'protobuf.rb')
3
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'log_request.rb')
4
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'get_log_request.rb')
5
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'put_logs_request.rb')
6
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'log_response.rb')
7
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'put_logs_response.rb')
8
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'util.rb')
9
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'log_client.rb')
10
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'log_item.rb')
11
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'create_log_store_response.rb')
12
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'get_log_store_response.rb')
13
+ require File.join(File.dirname(__FILE__), 'aliyun_sls_sdk', 'log_exception.rb')
14
+
15
+ module AliyunSlsSdk
16
+ class PostBodyInvalid < RuntimeError;
17
+ end
18
+ class SLSInvalidTimestamp < RuntimeError;
19
+ end
20
+ class SLSInvalidEncoding < RuntimeError;
21
+ end
22
+ class SLSInvalidKey < RuntimeError;
23
+ end
24
+ class PostBodyTooLarge < RuntimeError;
25
+ end
26
+ class PostBodyUncompressError < RuntimeError;
27
+ end
28
+ class SLSLogStoreNotExist < RuntimeError;
29
+ end
30
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aliyun_sls_ruby3_sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.10.0
5
+ platform: ruby
6
+ authors:
7
+ - langyong135
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-04-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: beefcake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: file-tail
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: ruby-hmac
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: addressable
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.5'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.5'
97
+ - !ruby/object:Gem::Dependency
98
+ name: net-http-persistent
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 4.0.2
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 4.0.2
111
+ description: Gem for SDK of SLS of Aliyun
112
+ email:
113
+ - langyong135@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - Gemfile
120
+ - LICENSE.txt
121
+ - README.md
122
+ - aliyun_sls_sdk.gemspec
123
+ - lib/aliyun_sls_sdk.rb
124
+ - lib/aliyun_sls_sdk/create_log_store_response.rb
125
+ - lib/aliyun_sls_sdk/get_log_request.rb
126
+ - lib/aliyun_sls_sdk/get_log_store_response.rb
127
+ - lib/aliyun_sls_sdk/log_client.rb
128
+ - lib/aliyun_sls_sdk/log_exception.rb
129
+ - lib/aliyun_sls_sdk/log_item.rb
130
+ - lib/aliyun_sls_sdk/log_request.rb
131
+ - lib/aliyun_sls_sdk/log_response.rb
132
+ - lib/aliyun_sls_sdk/protobuf.rb
133
+ - lib/aliyun_sls_sdk/put_logs_request.rb
134
+ - lib/aliyun_sls_sdk/put_logs_response.rb
135
+ - lib/aliyun_sls_sdk/util.rb
136
+ - lib/aliyun_sls_sdk/version.rb
137
+ homepage: https://help.aliyun.com/product/28958.html
138
+ licenses:
139
+ - MIT
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubygems_version: 3.3.26
157
+ signing_key:
158
+ specification_version: 4
159
+ summary: Gem for SDK of SLS of Aliyun, use it at your own risk
160
+ test_files: []