cf_light_api 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cf_light_api/worker.rb +27 -3
  3. metadata +18 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9be10be33cf01b43330ee3aaee4f001f0f247437
4
- data.tar.gz: 9df2e44bac564c56b13da916bfeb8a251e037c5c
3
+ metadata.gz: 892f44f1093e2c4dbe2e195463dafbe2a4038ec3
4
+ data.tar.gz: 516a3ddd90bc674dd5ccb9dd8ff4fbaefb3ce586
5
5
  SHA512:
6
- metadata.gz: e275f663dd7baa03b7c4f61d9f477b943d9e9ca50c79d44bd6a47a897dd7ad2aa7bdf928fb384197162ac3d0092b9920341928da1d68841f5aa487f19c2f5671
7
- data.tar.gz: 7d113cc505ae09a1922bc2b1202f99bdff42c21659215cc6b89d23a6ee148e8fd51890f0f8810fc5b451d15eb56b0524efbc315bb312779579da71e891d17133
6
+ metadata.gz: 2b4a1be614230c15fea449956cb6935648ddddbe5add1a750c390cca984531b1e385d4b6581f9fc7d0e36c8a774dc094dbb9a1f3d26a46afd78dc0fb9662b999
7
+ data.tar.gz: 40fe1395ff99687ecce09ddc7ee9fdb16a0447889d2af427780d83964b3afbd8582d131bd9f79d4f55c6cd6d6a2e2b6a3075a3b72b6e55c01ab2012d2257b742
@@ -4,6 +4,7 @@ require 'rufus-scheduler'
4
4
  require 'parallel'
5
5
  require 'redlock'
6
6
  require 'logger'
7
+ require 'graphite-api'
7
8
 
8
9
  @logger = Logger.new(STDOUT)
9
10
  @logger.formatter = proc do |severity, datetime, progname, msg|
@@ -28,6 +29,10 @@ scheduler = Rufus::Scheduler.new
28
29
 
29
30
  scheduler.every UPDATE_INTERVAL, :first_in => '5s', :overlap => false, :timeout => UPDATE_TIMEOUT do
30
31
  cf_client = nil
32
+
33
+ graphite = if ENV['GRAPHITE'] then GraphiteAPI.new(graphite: ENV['GRAPHITE']) end
34
+ @logger.info "Sending data to graphite server #{ENV['GRAPHITE']}" if graphite
35
+
31
36
  begin
32
37
  lock_manager.lock("#{ENV['REDIS_KEY_PREFIX']}:lock", 5*60*1000) do |lock|
33
38
  if lock
@@ -38,7 +43,7 @@ scheduler.every UPDATE_INTERVAL, :first_in => '5s', :overlap => false, :timeout
38
43
  cf_client = get_client()
39
44
 
40
45
  org_data = get_org_data(cf_client)
41
- app_data = get_app_data(cf_client)
46
+ app_data = get_app_data(cf_client, graphite)
42
47
 
43
48
  put_in_redis "#{ENV['REDIS_KEY_PREFIX']}:orgs", org_data
44
49
  put_in_redis "#{ENV['REDIS_KEY_PREFIX']}:apps", app_data
@@ -64,7 +69,22 @@ def get_client(cf_api=ENV['CF_API'], cf_user=ENV['CF_USER'], cf_password=ENV['CF
64
69
  client
65
70
  end
66
71
 
67
- def get_app_data(cf_client)
72
+ def send_data_to_graphite(data, graphite)
73
+ org = data[:org]
74
+ space = data[:space]
75
+ name = data[:name].sub ".", "_" # Some apps have dots in the app name
76
+
77
+ data[:instances].each_with_index do |instance_data, index|
78
+ instance_data[:stats][:usage].each do |key, value|
79
+ if key != :time
80
+ graphite_key = "cf_apps.#{org}.#{space}.#{name}.#{index}.#{key}"
81
+ graphite.metrics graphite_key => value
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ def get_app_data(cf_client, graphite)
68
88
  Parallel.map(cf_client.organizations, :in_processes => PARALLEL_MAPS) do |org|
69
89
  org_name = org.name
70
90
  Parallel.map(org.spaces, :in_processes => PARALLEL_MAPS) do |space|
@@ -73,7 +93,11 @@ def get_app_data(cf_client)
73
93
  Parallel.map(space.apps, :in_processes => PARALLEL_MAPS) do |app|
74
94
  begin
75
95
  # It's possible for an app to have been terminated before this stage is reached.
76
- format_app_data(app, org_name, space_name)
96
+ formatted_app_data = format_app_data(app, org_name, space_name)
97
+ if graphite
98
+ send_data_to_graphite(formatted_app_data, graphite)
99
+ end
100
+ formatted_app_data
77
101
  rescue CFoundry::AppNotFound
78
102
  next
79
103
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cf_light_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Springer Platform Engineering
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-09 00:00:00.000000000 Z
11
+ date: 2015-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cfoundry
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.1.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: graphite-api
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.1.6
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.1.6
97
111
  description: A super lightweight API for reading App and Org data from CloudFoundry,
98
112
  cached in Redis.
99
113
  email: ''
@@ -102,9 +116,9 @@ executables:
102
116
  extensions: []
103
117
  extra_rdoc_files: []
104
118
  files:
105
- - ./lib/sinatra/cf_light_api.rb
106
119
  - ./lib/cf_light_api/redis.rb
107
120
  - ./lib/cf_light_api/worker.rb
121
+ - ./lib/sinatra/cf_light_api.rb
108
122
  - bin/cf_light_api
109
123
  homepage: https://github.com/springerpe/cf-light-api
110
124
  licenses:
@@ -126,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
140
  version: '0'
127
141
  requirements: []
128
142
  rubyforge_project:
129
- rubygems_version: 2.0.14
143
+ rubygems_version: 2.4.6
130
144
  signing_key:
131
145
  specification_version: 4
132
146
  summary: A super lightweight API for reading App and Org data from CloudFoundry, cached