fluent-plugin-geovis 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
  SHA256:
3
- metadata.gz: 2c9f1a5ffa607e0cf5e9d28c26cb4c5b50092f43e750b31b05568d45bc88f3b8
4
- data.tar.gz: 8b8c93bfa7360461709e5e4d73cd42ff81a5843d191c8ad43c8cc54cfb9a59cb
3
+ metadata.gz: 4ecae9544ef25c489a7c538488346d0eeafe51c18006ea741e064fc61c4793d5
4
+ data.tar.gz: 1f45276072d904bff25260d796ea0e48a8e983f7842efc827c333b22f3b7019c
5
5
  SHA512:
6
- metadata.gz: d26eeeaad6ca0d44968bc46e45bc982ea26b9d01427f4ae0aecd6bb53d03636d5a03e3c2d9754752c2dd61cca1378e5aded3be9c20aaae2de62cb5ca5e402fac
7
- data.tar.gz: 2c344b51b54d911baf0760029e7697fca5df2be120b4ff82778d9e979a73b469a191475ab9e223f91c03ea63b6a5103efccb52c33a1a0b05fd6b0962c03d9784
6
+ metadata.gz: 3d84a7a8aec1675bbc84e17b19b2cf73ea66feb816a3200ef059501fe8202363ec0cb73dde9b0fd66523a84fe96c9fd41c2b6fe6e2725ff58f29ce277328f6aa
7
+ data.tar.gz: 8ceedfbe7555743a38893274739fcbc77725efdcbd3612e7c4bf719ba654c347b5b7229084522b6a32890c636dd2b8ae3f25f8e8b3304bea16c8796b9c2fbabb
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "fluent-plugin-geovis"
6
- spec.version = "0.0.3"
6
+ spec.version = "0.0.4"
7
7
  spec.authors = ["li.baosheng"]
8
8
  spec.email = ["libs@geovis.com.cn"]
9
9
 
@@ -31,7 +31,7 @@ module Fluent
31
31
  end
32
32
  require 'kubeclient'
33
33
 
34
- log.info "==================================FetchpodnameFilter configure"
34
+ log.debug "Geovis Filter configure"
35
35
 
36
36
  # Use Kubernetes default service account if we're in a pod.
37
37
  if @kubernetes_url.nil?
@@ -68,6 +68,7 @@ module Fluent
68
68
 
69
69
  if !@kubernetes_url.nil?
70
70
  if insecure
71
+ log.debug "Creating insecure K8S client"
71
72
  @client = Kubeclient::Client.new @kubernetes_url, @apiVersion
72
73
  else
73
74
  ssl_options = {
@@ -84,7 +85,7 @@ module Fluent
84
85
  auth_options[:bearer_token] = bearer_token
85
86
  end
86
87
 
87
- log.debug "Creating K8S client"
88
+ log.debug "Creating secure K8S client"
88
89
  @client = Kubeclient::Client.new @kubernetes_url, @apiVersion,
89
90
  ssl_options: ssl_options,
90
91
  auth_options: auth_options
@@ -95,23 +96,99 @@ module Fluent
95
96
  rescue KubeException => kube_error
96
97
  raise Fluent::ConfigError, "Invalid Kubernetes API #{@apiVersion} endpoint #{@kubernetes_url}: #{kube_error.message}"
97
98
  end
99
+ @podsHash = {}
100
+ fetch_pods
98
101
  end
99
102
  end
100
103
 
101
104
  def filter_stream(tag, es)
102
- puts "==================================FetchpodnameFilter filter"
105
+ log.debug "Geovis Filter filter"
103
106
  return es if (es.respond_to?(:empty?) && es.empty?) || !es.is_a?(Fluent::EventStream)
104
107
  new_es = Fluent::MultiEventStream.new
105
108
  es.each do |time, record|
106
- puts record['uuid']
107
-
109
+ metadata = nil
110
+ if @podsHash.has_key?(record['uuid'])
111
+ metadata = @podsHash[record['uuid']]
112
+ log.info "find pod for uuid: #{record['uuid']}"
113
+ else
114
+ fetch_pods
115
+ if @podsHash.has_key?(record['uuid'])
116
+ metadata = @podsHash[record['uuid']]
117
+ else
118
+ log.error "pod does not exist: #{record['uuid']}"
119
+ end
120
+ end
121
+ record = record.merge(metadata) if metadata
108
122
  new_es.add(time, record)
109
123
  end
110
124
 
111
125
  new_es
112
126
  end
113
127
 
128
+ def fetch_pods()
129
+ log.debug "Geovis Filter fetch_pods"
130
+ newPodsHash = {}
131
+ @client.get_pods.each do |pod_object|
132
+ kubernetes_metadata = parse_pod_metadata(pod_object)
133
+ newPodsHash[kubernetes_metadata['pod_id']] = kubernetes_metadata
134
+ end
135
+ log.info @podsHash.length
136
+ @podsHash = newPodsHash.merge @podsHash
137
+ log.info newPodsHash.length
138
+ end
139
+
140
+ def parse_pod_metadata(pod_object)
141
+ labels = syms_to_strs(pod_object['metadata']['labels'].to_h)
142
+ if @de_dot
143
+ self.de_dot!(labels)
144
+ self.de_dot!(annotations)
145
+ end
146
+
147
+ # collect container informations
148
+ container_meta = {}
149
+ begin
150
+ pod_object['status']['containerStatuses'].each do|container_status|
151
+ # get plain container id (eg. docker://hash -> hash)
152
+ container_id = container_status['containerID'].sub /^[-_a-zA-Z0-9]+:\/\//, ''
153
+ container_meta[container_id] = {
154
+ 'name' => container_status['name'],
155
+ 'image' => container_status['image'],
156
+ 'image_id' => container_status['imageID']
157
+ }
158
+ end
159
+ rescue
160
+ log.debug("parsing container meta information failed for: #{pod_object['metadata']['namespace']}/#{pod_object['metadata']['name']} ")
161
+ end
162
+
163
+ kubernetes_metadata = {
164
+ 'namespace_name' => pod_object['metadata']['namespace'],
165
+ 'pod_id' => pod_object['metadata']['uid'],
166
+ 'pod_name' => pod_object['metadata']['name'],
167
+ 'containers' => syms_to_strs(container_meta),
168
+ 'labels' => labels,
169
+ 'host' => pod_object['spec']['nodeName'],
170
+ 'master_url' => @kubernetes_url
171
+ }
172
+ return kubernetes_metadata
173
+ end
174
+
175
+ def syms_to_strs(hsh)
176
+ newhsh = {}
177
+ hsh.each_pair do |kk,vv|
178
+ if vv.is_a?(Hash)
179
+ vv = syms_to_strs(vv)
180
+ end
181
+ if kk.is_a?(Symbol)
182
+ newhsh[kk.to_s] = vv
183
+ else
184
+ newhsh[kk] = vv
185
+ end
186
+ end
187
+ newhsh
188
+ end
189
+
114
190
  end
115
191
  end
116
192
  end
117
193
 
194
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-geovis
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
  - li.baosheng
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-20 00:00:00.000000000 Z
11
+ date: 2018-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler