aliyun-log 0.2.2 → 0.2.6
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/lib/aliyun/log/common/logging.rb +1 -1
- data/lib/aliyun/log/config.rb +0 -1
- data/lib/aliyun/log/protocol.rb +3 -3
- data/lib/aliyun/log/record.rb +32 -13
- data/lib/aliyun/log/record/field.rb +1 -4
- data/lib/aliyun/log/record/persistence.rb +12 -5
- data/lib/aliyun/log/record/relation.rb +53 -0
- data/lib/aliyun/log/record/scope_registry.rb +40 -0
- data/lib/aliyun/log/request.rb +1 -1
- data/lib/aliyun/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed78b39497d6a671405b2d815292ca1e1e11ee301d816395264add76a9bc1235
|
4
|
+
data.tar.gz: 1b2f92c27745b27be61ca5f8fbb41470eaffcd710b22979671604173646c5450
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19e6a18d2c168882054e14875da1baa18bab32217b2626a33e209e25c867b011deb5cba7d0b6de2f4af40a67ff4c66fb12ff3908881d9e28ced5ca8020c152b4
|
7
|
+
data.tar.gz: 7cfdddb1c6d804b4f62ee34cac200d4eb869ff32c70cf5bda5a4fd10947d06c5df61ba273662aff908a57e685a8ce2c586d1e3efed8d71e1dc2c8a59b649e117
|
data/lib/aliyun/log/config.rb
CHANGED
data/lib/aliyun/log/protocol.rb
CHANGED
@@ -108,7 +108,7 @@ module Aliyun
|
|
108
108
|
def build_log_pb(attrs, time = Time.now.to_i)
|
109
109
|
logs = attrs.is_a?(Array) ? attrs : [attrs]
|
110
110
|
logs.map do |log_attr|
|
111
|
-
contents = log_attr.
|
111
|
+
contents = log_attr.map { |k, v| { key: k, value: v.to_s } }
|
112
112
|
Protobuf::Log.new(time: time, contents: contents)
|
113
113
|
end
|
114
114
|
end
|
@@ -182,7 +182,7 @@ module Aliyun
|
|
182
182
|
keys: {}
|
183
183
|
}
|
184
184
|
fields.each do |k, v|
|
185
|
-
v[:token] = INDEX_DEFAULT_TOKEN if %w[text json].include?(v[:type].to_s) && v[:token].
|
185
|
+
v[:token] = INDEX_DEFAULT_TOKEN if %w[text json].include?(v[:type].to_s) && v[:token].nil?
|
186
186
|
body[:keys][k] = v
|
187
187
|
end
|
188
188
|
@http.post({ project: project_name, logstore: logstore_name, action: 'index' }, body.to_json)
|
@@ -196,7 +196,7 @@ module Aliyun
|
|
196
196
|
keys: {}
|
197
197
|
}
|
198
198
|
fields.each do |k, v|
|
199
|
-
v[:token] = INDEX_DEFAULT_TOKEN if %w[text json].include?(v[:type].to_s) && v[:token].
|
199
|
+
v[:token] = INDEX_DEFAULT_TOKEN if %w[text json].include?(v[:type].to_s) && v[:token].nil?
|
200
200
|
body[:keys][k] = v
|
201
201
|
end
|
202
202
|
@http.put({ project: project_name, logstore: logstore_name, action: 'index' }, body.to_json)
|
data/lib/aliyun/log/record.rb
CHANGED
@@ -10,6 +10,7 @@ require_relative 'record/exception'
|
|
10
10
|
require_relative 'record/field'
|
11
11
|
require_relative 'record/persistence'
|
12
12
|
require_relative 'record/relation'
|
13
|
+
require_relative 'record/scope_registry'
|
13
14
|
|
14
15
|
module Aliyun
|
15
16
|
module Log
|
@@ -31,7 +32,7 @@ module Aliyun
|
|
31
32
|
|
32
33
|
define_model_callbacks :save, :create, :initialize
|
33
34
|
|
34
|
-
|
35
|
+
before_save :set_created_at
|
35
36
|
end
|
36
37
|
|
37
38
|
include Field
|
@@ -41,27 +42,45 @@ module Aliyun
|
|
41
42
|
|
42
43
|
module ClassMethods
|
43
44
|
def logstore(options = {})
|
44
|
-
|
45
|
+
opt = options.dup
|
46
|
+
if opt[:timestamps] && !Config.timestamps
|
45
47
|
field :created_at, :text
|
46
|
-
elsif
|
48
|
+
elsif opt[:timestamps] == false && Config.timestamps
|
47
49
|
remove_field :created_at
|
48
50
|
end
|
49
|
-
self._schema_load = true if
|
50
|
-
|
51
|
+
self._schema_load = true if opt[:auto_sync] == false
|
52
|
+
opt[:field_doc_value] = opt[:field_doc_value] != false
|
53
|
+
self.options = opt
|
51
54
|
end
|
52
55
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
56
|
+
delegate :load, :result, :count, to: :all
|
57
|
+
delegate :where, :query, :search, :sql, :from, :to, :page, :line, :limit, :offset, to: :all
|
58
|
+
delegate :first, :last, :second, :third, :fourth, :fifth, :find_offset, to: :all
|
59
|
+
|
60
|
+
def current_scope
|
61
|
+
ScopeRegistry.value_for(:current_scope, self)
|
62
|
+
end
|
63
|
+
|
64
|
+
def current_scope=(scope)
|
65
|
+
ScopeRegistry.set_value_for(:current_scope, self, scope)
|
57
66
|
end
|
58
67
|
|
59
|
-
|
60
|
-
|
61
|
-
|
68
|
+
def scope(name, body)
|
69
|
+
raise ArgumentError, 'The scope body needs to be callable.' unless body.respond_to?(:call)
|
70
|
+
|
71
|
+
singleton_class.send(:define_method, name) do |*args|
|
72
|
+
scope = all
|
73
|
+
scope = scope.scoping { body.call(*args) }
|
74
|
+
scope
|
62
75
|
end
|
63
76
|
end
|
64
77
|
|
78
|
+
def all
|
79
|
+
scope = current_scope
|
80
|
+
scope ||= relation.from(0).to(Time.now.to_i)
|
81
|
+
scope
|
82
|
+
end
|
83
|
+
|
65
84
|
private
|
66
85
|
|
67
86
|
def relation
|
@@ -101,7 +120,7 @@ module Aliyun
|
|
101
120
|
end.compact.join(', ')
|
102
121
|
else
|
103
122
|
'not initialized'
|
104
|
-
|
123
|
+
end
|
105
124
|
|
106
125
|
"#<#{self.class} #{inspection}>"
|
107
126
|
end
|
@@ -1,8 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "active_support"
|
3
|
-
require "active_support/time"
|
4
|
-
require "active_support/core_ext"
|
5
|
-
require "active_model"
|
6
2
|
|
7
3
|
module Aliyun
|
8
4
|
module Log
|
@@ -29,6 +25,7 @@ module Aliyun
|
|
29
25
|
unless PERMITTED_KEY_TYPES.include?(type)
|
30
26
|
raise ArgumentError, "Field #{name} type(#{type}) error, key type only support text/long/double/json"
|
31
27
|
end
|
28
|
+
|
32
29
|
named = name.to_s
|
33
30
|
self.attributes = attributes.merge(name => { type: type }.merge(options))
|
34
31
|
|
@@ -8,7 +8,8 @@ module Aliyun
|
|
8
8
|
|
9
9
|
module ClassMethods
|
10
10
|
def logstore_name
|
11
|
-
@logstore_name ||= options[:name] ||
|
11
|
+
@logstore_name ||= options[:name] ||
|
12
|
+
base_class.name.split('::').last.underscore.pluralize
|
12
13
|
end
|
13
14
|
|
14
15
|
def logstore_name=(value)
|
@@ -79,11 +80,17 @@ module Aliyun
|
|
79
80
|
end
|
80
81
|
|
81
82
|
def field_indices
|
82
|
-
if options[:field_index] ==
|
83
|
-
|
84
|
-
|
85
|
-
|
83
|
+
indices = if options[:field_index] == false
|
84
|
+
attributes.select { |_, value| value[:index] == true }
|
85
|
+
else
|
86
|
+
attributes.reject { |_, value| value[:index] == false }
|
87
|
+
end
|
88
|
+
indices.each do |_, v|
|
89
|
+
next unless v[:doc_value].nil?
|
90
|
+
|
91
|
+
v[:doc_value] = options[:field_doc_value] != false
|
86
92
|
end
|
93
|
+
indices
|
87
94
|
end
|
88
95
|
|
89
96
|
def create_index
|
@@ -11,6 +11,49 @@ module Aliyun
|
|
11
11
|
@opts[:search] ||= '*'
|
12
12
|
end
|
13
13
|
|
14
|
+
def inspect
|
15
|
+
"#<#{self.class}>"
|
16
|
+
end
|
17
|
+
|
18
|
+
def first(line = 1)
|
19
|
+
find_offset(0, line, false)
|
20
|
+
end
|
21
|
+
|
22
|
+
def second
|
23
|
+
find_offset(1)
|
24
|
+
end
|
25
|
+
|
26
|
+
def third
|
27
|
+
find_offset(2)
|
28
|
+
end
|
29
|
+
|
30
|
+
def fourth
|
31
|
+
find_offset(3)
|
32
|
+
end
|
33
|
+
|
34
|
+
def fifth
|
35
|
+
find_offset(4)
|
36
|
+
end
|
37
|
+
|
38
|
+
def last(line = 1)
|
39
|
+
find_offset(0, line, true)
|
40
|
+
end
|
41
|
+
|
42
|
+
def find_offset(nth, line = 1, reverse = false)
|
43
|
+
@opts[:line] = line
|
44
|
+
@opts[:offset] = nth
|
45
|
+
@opts[:reverse] = reverse
|
46
|
+
line <= 1 ? load[0] : load
|
47
|
+
end
|
48
|
+
|
49
|
+
def scoping
|
50
|
+
previous = @klass.current_scope
|
51
|
+
@klass.current_scope = self
|
52
|
+
yield
|
53
|
+
ensure
|
54
|
+
@klass.current_scope = previous
|
55
|
+
end
|
56
|
+
|
14
57
|
def from(from)
|
15
58
|
ts = from.is_a?(Integer) ? from : from.to_time.to_i
|
16
59
|
@opts[:from] = ts
|
@@ -92,6 +135,16 @@ module Aliyun
|
|
92
135
|
@klass.new(attrs)
|
93
136
|
end
|
94
137
|
end
|
138
|
+
|
139
|
+
private
|
140
|
+
|
141
|
+
def method_missing(method, *args, &block)
|
142
|
+
if @klass.respond_to?(method)
|
143
|
+
scoping { @klass.public_send(method, *args, &block) }
|
144
|
+
else
|
145
|
+
super
|
146
|
+
end
|
147
|
+
end
|
95
148
|
end
|
96
149
|
end
|
97
150
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Aliyun
|
4
|
+
module Log
|
5
|
+
module PerThreadRegistry
|
6
|
+
def self.extended(object)
|
7
|
+
object.instance_variable_set '@per_thread_registry_key', object.name.freeze
|
8
|
+
end
|
9
|
+
|
10
|
+
def instance
|
11
|
+
Thread.current[@per_thread_registry_key] ||= new
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def method_missing(name, *args, &block)
|
17
|
+
singleton_class.delegate name, to: :instance
|
18
|
+
|
19
|
+
send(name, *args, &block)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class ScopeRegistry
|
24
|
+
extend PerThreadRegistry
|
25
|
+
|
26
|
+
def initialize
|
27
|
+
@registry = Hash.new { |hash, key| hash[key] = {} }
|
28
|
+
end
|
29
|
+
|
30
|
+
def value_for(scope_type, model)
|
31
|
+
@registry[scope_type][model.name]
|
32
|
+
end
|
33
|
+
|
34
|
+
# Sets the +value+ for a given +scope_type+ and +model+.
|
35
|
+
def set_value_for(scope_type, model, value)
|
36
|
+
@registry[scope_type][model.name] = value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/aliyun/log/request.rb
CHANGED
data/lib/aliyun/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aliyun-log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yingce Liu
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- lib/aliyun/log/record/field.rb
|
137
137
|
- lib/aliyun/log/record/persistence.rb
|
138
138
|
- lib/aliyun/log/record/relation.rb
|
139
|
+
- lib/aliyun/log/record/scope_registry.rb
|
139
140
|
- lib/aliyun/log/request.rb
|
140
141
|
- lib/aliyun/log/server_error.rb
|
141
142
|
- lib/aliyun/version.rb
|