trogdir_api 0.2.1 → 0.3.0

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: e718e085c241224b67d4ae83d769990fbcd0aa88
4
- data.tar.gz: 9090142fec71fdb63f4f4665d74168186f5ee2e4
3
+ metadata.gz: 7f1efaf73b978fcaa10879ec8bf5819bbd7fdc5d
4
+ data.tar.gz: 15040349ac03960710fc11bca26f4477adb8865a
5
5
  SHA512:
6
- metadata.gz: 159c788383717a4f237283af435d7edd8bac9b9bfa65c4e98779a35321f789d3fc57c3c58a16661639e2f3af6c96f37f225e61afe9eb8ce970f97d87d4120c33
7
- data.tar.gz: 7b38b14abb64e92dd9ff357421993d8c82c015912a5999d0352cacdee4b3aeb6bccad18a52b4d760071968f99283a81a14f65f135c7f5bb20b4cca3d86c86ed7
6
+ metadata.gz: 3033a7cc53172214060b2da6b5a6d89beb72934775eac9cf42ce8080d077ae20ae9bd11fbdd4012c0f9f061e5864dc4c5c3bac46d4ae26f8ae2c200cba76f6f2
7
+ data.tar.gz: 08ce75be68dac0fd356f888d1596fbbef3e4caf1523b06cb581a4cee5168857a85bf27a17ee7db64a9ef32a0dcd6801c7c2be2dd532d7adcdf33224f162a84ed
data/config/blazing.rb ADDED
@@ -0,0 +1,7 @@
1
+ target :'ruby2.staging', 'adamc7@ruby2.staging.biola.edu:/srv/rack/trogdir-api', rails_env: 'staging'
2
+ target :'ruby5a.prod', 'adamc7@ruby5a.prod.biola.edu:/srv/rack/trogdir-api', rails_env: 'production'
3
+ target :'ruby5b.prod', 'adamc7@ruby5b.prod.biola.edu:/srv/rack/trogdir-api', rails_env: 'production'
4
+
5
+ env_scripts '/etc/profile'
6
+
7
+ rake :post_deploy
@@ -0,0 +1,7 @@
1
+ target :'ruby2.staging', 'johnd0@ruby1.staging.biola.edu:/srv/rack/trogdir-api', rails_env: 'staging'
2
+ target :'ruby3a.prod', 'johnd0@ruby3a.prod.biola.edu:/srv/rack/trodgir-api', rails_env: 'production'
3
+ target :'ruby3b.prod', 'johnd0@ruby3b.prod.biola.edu:/srv/rack/trogdir-api', rails_env: 'production'
4
+
5
+ env_scripts '/etc/profile'
6
+
7
+ rake :post_deploy
@@ -1,5 +1,5 @@
1
1
  require 'bundler'
2
- Bundler.setup :default, ENV['RACK_ENV'] || ENV['RAILS_ENV'] || :developement
2
+ Bundler.setup :default, ENV['RACK_ENV'] || ENV['RAILS_ENV'] || :development
3
3
 
4
4
  require_relative '../lib/trogdir_api'
5
- TrogdirAPI.initialize!
5
+ TrogdirAPI.initialize!
@@ -0,0 +1,227 @@
1
+ #
2
+ # This file configures the New Relic Agent. New Relic monitors
3
+ # Ruby, Java, .NET, PHP, and Python applications with deep visibility and low overhead.
4
+ # For more information, visit www.newrelic.com.
5
+ #
6
+ # Generated May 01, 2014
7
+ #
8
+ # This configuration file is custom generated for Biola University
9
+
10
+
11
+ # Here are the settings that are common to all environments
12
+ common: &default_settings
13
+ # ============================== LICENSE KEY ===============================
14
+
15
+ # You must specify the license key associated with your New Relic
16
+ # account. This key binds your Agent's data to your account in the
17
+ # New Relic service.
18
+ license_key: # set in newrelic.yml
19
+
20
+ # Agent Enabled (Ruby/Rails Only)
21
+ # Use this setting to force the agent to run or not run.
22
+ # Default is 'auto' which means the agent will install and run only
23
+ # if a valid dispatcher such as Mongrel is running. This prevents
24
+ # it from running with Rake or the console. Set to false to
25
+ # completely turn the agent off regardless of the other settings.
26
+ # Valid values are true, false and auto.
27
+ #
28
+ # agent_enabled: auto
29
+
30
+ # Application Name Set this to be the name of your application as
31
+ # you'd like it show up in New Relic. The service will then auto-map
32
+ # instances of your application into an "application" on your
33
+ # dashboard page. If you want to map this instance into multiple
34
+ # apps, like "AJAX Requests" and "All UI" then specify a semicolon
35
+ # separated list of up to three distinct names, or a yaml list.
36
+ # Defaults to the capitalized RAILS_ENV or RACK_ENV (i.e.,
37
+ # Production, Staging, etc)
38
+ #
39
+ # Example:
40
+ #
41
+ # app_name:
42
+ # - Ajax Service
43
+ # - All Services
44
+ #
45
+ app_name: trogdir-api
46
+
47
+ # When "true", the agent collects performance data about your
48
+ # application and reports this data to the New Relic service at
49
+ # newrelic.com. This global switch is normally overridden for each
50
+ # environment below. (formerly called 'enabled')
51
+ monitor_mode: true
52
+
53
+ # Developer mode should be off in every environment but
54
+ # development as it has very high overhead in memory.
55
+ developer_mode: false
56
+
57
+ # The newrelic agent generates its own log file to keep its logging
58
+ # information separate from that of your application. Specify its
59
+ # log level here.
60
+ log_level: info
61
+
62
+ # Optionally set the path to the log file This is expanded from the
63
+ # root directory (may be relative or absolute, e.g. 'log/' or
64
+ # '/var/log/') The agent will attempt to create this directory if it
65
+ # does not exist.
66
+ # log_file_path: 'log'
67
+
68
+ # Optionally set the name of the log file, defaults to 'newrelic_agent.log'
69
+ # log_file_name: 'newrelic_agent.log'
70
+
71
+ # The newrelic agent communicates with the service via https by default. This
72
+ # prevents eavesdropping on the performance metrics transmitted by the agent.
73
+ # The encryption required by SSL introduces a nominal amount of CPU overhead,
74
+ # which is performed asynchronously in a background thread. If you'd prefer
75
+ # to send your metrics over http uncomment the following line.
76
+ # ssl: false
77
+
78
+ #============================== Browser Monitoring ===============================
79
+ # New Relic Real User Monitoring gives you insight into the performance real users are
80
+ # experiencing with your website. This is accomplished by measuring the time it takes for
81
+ # your users' browsers to download and render your web pages by injecting a small amount
82
+ # of JavaScript code into the header and footer of each page.
83
+ browser_monitoring:
84
+ # By default the agent automatically injects the monitoring JavaScript
85
+ # into web pages. Set this attribute to false to turn off this behavior.
86
+ auto_instrument: true
87
+
88
+ # Proxy settings for connecting to the New Relic server.
89
+ #
90
+ # If a proxy is used, the host setting is required. Other settings
91
+ # are optional. Default port is 8080.
92
+ #
93
+ # proxy_host: hostname
94
+ # proxy_port: 8080
95
+ # proxy_user:
96
+ # proxy_pass:
97
+
98
+ # The agent can optionally log all data it sends to New Relic servers to a
99
+ # separate log file for human inspection and auditing purposes. To enable this
100
+ # feature, change 'enabled' below to true.
101
+ # See: https://newrelic.com/docs/ruby/audit-log
102
+ audit_log:
103
+ enabled: false
104
+
105
+ # Tells transaction tracer and error collector (when enabled)
106
+ # whether or not to capture HTTP params. When true, frameworks can
107
+ # exclude HTTP parameters from being captured.
108
+ # Rails: the RoR filter_parameter_logging excludes parameters
109
+ # Java: create a config setting called "ignored_params" and set it to
110
+ # a comma separated list of HTTP parameter names.
111
+ # ex: ignored_params: credit_card, ssn, password
112
+ capture_params: false
113
+
114
+ # Transaction tracer captures deep information about slow
115
+ # transactions and sends this to the New Relic service once a
116
+ # minute. Included in the transaction is the exact call sequence of
117
+ # the transactions including any SQL statements issued.
118
+ transaction_tracer:
119
+
120
+ # Transaction tracer is enabled by default. Set this to false to
121
+ # turn it off. This feature is only available at the Professional
122
+ # and above product levels.
123
+ enabled: true
124
+
125
+ # Threshold in seconds for when to collect a transaction
126
+ # trace. When the response time of a controller action exceeds
127
+ # this threshold, a transaction trace will be recorded and sent to
128
+ # New Relic. Valid values are any float value, or (default) "apdex_f",
129
+ # which will use the threshold for an dissatisfying Apdex
130
+ # controller action - four times the Apdex T value.
131
+ transaction_threshold: apdex_f
132
+
133
+ # When transaction tracer is on, SQL statements can optionally be
134
+ # recorded. The recorder has three modes, "off" which sends no
135
+ # SQL, "raw" which sends the SQL statement in its original form,
136
+ # and "obfuscated", which strips out numeric and string literals.
137
+ record_sql: obfuscated
138
+
139
+ # Threshold in seconds for when to collect stack trace for a SQL
140
+ # call. In other words, when SQL statements exceed this threshold,
141
+ # then capture and send to New Relic the current stack trace. This is
142
+ # helpful for pinpointing where long SQL calls originate from.
143
+ stack_trace_threshold: 0.500
144
+
145
+ # Determines whether the agent will capture query plans for slow
146
+ # SQL queries. Only supported in mysql and postgres. Should be
147
+ # set to false when using other adapters.
148
+ # explain_enabled: true
149
+
150
+ # Threshold for query execution time below which query plans will
151
+ # not be captured. Relevant only when `explain_enabled` is true.
152
+ # explain_threshold: 0.5
153
+
154
+ # Error collector captures information about uncaught exceptions and
155
+ # sends them to New Relic for viewing
156
+ error_collector:
157
+
158
+ # Error collector is enabled by default. Set this to false to turn
159
+ # it off. This feature is only available at the Professional and above
160
+ # product levels.
161
+ enabled: true
162
+
163
+ # Rails Only - tells error collector whether or not to capture a
164
+ # source snippet around the place of the error when errors are View
165
+ # related.
166
+ capture_source: true
167
+
168
+ # To stop specific errors from reporting to New Relic, set this property
169
+ # to comma-separated values. Default is to ignore routing errors,
170
+ # which are how 404's get triggered.
171
+ ignore_errors: "ActionController::RoutingError,Sinatra::NotFound"
172
+
173
+ # If you're interested in capturing memcache keys as though they
174
+ # were SQL uncomment this flag. Note that this does increase
175
+ # overhead slightly on every memcached call, and can have security
176
+ # implications if your memcached keys are sensitive
177
+ # capture_memcache_keys: true
178
+
179
+ # Application Environments
180
+ # ------------------------------------------
181
+ # Environment-specific settings are in this section.
182
+ # For Rails applications, RAILS_ENV is used to determine the environment.
183
+ # For Java applications, pass -Dnewrelic.environment <environment> to set
184
+ # the environment.
185
+
186
+ # NOTE if your application has other named environments, you should
187
+ # provide newrelic configuration settings for these environments here.
188
+
189
+ development:
190
+ <<: *default_settings
191
+ # Turn off communication to New Relic service in development mode (also
192
+ # 'enabled').
193
+ # NOTE: for initial evaluation purposes, you may want to temporarily
194
+ # turn the agent on in development mode.
195
+ monitor_mode: false
196
+
197
+ # Rails Only - when running in Developer Mode, the New Relic Agent will
198
+ # present performance information on the last 100 transactions you have
199
+ # executed since starting the mongrel.
200
+ # NOTE: There is substantial overhead when running in developer mode.
201
+ # Do not use for production or load testing.
202
+ developer_mode: true
203
+
204
+ # Enable textmate links
205
+ # textmate: true
206
+
207
+ test:
208
+ <<: *default_settings
209
+ # It almost never makes sense to turn on the agent when running
210
+ # unit, functional or integration tests or the like.
211
+ monitor_mode: false
212
+
213
+ # Turn on the agent in production for 24x7 monitoring. NewRelic
214
+ # testing shows an average performance impact of < 5 ms per
215
+ # transaction, you can leave this on all the time without
216
+ # incurring any user-visible performance degradation.
217
+ production:
218
+ <<: *default_settings
219
+ monitor_mode: true
220
+
221
+ # Many applications have a staging environment which behaves
222
+ # identically to production. Support for that environment is provided
223
+ # here. By default, the staging environment has the agent turned on.
224
+ staging:
225
+ <<: *default_settings
226
+ monitor_mode: true
227
+ # app_name: My Application (Staging)
@@ -0,0 +1,227 @@
1
+ #
2
+ # This file configures the New Relic Agent. New Relic monitors
3
+ # Ruby, Java, .NET, PHP, and Python applications with deep visibility and low overhead.
4
+ # For more information, visit www.newrelic.com.
5
+ #
6
+ # Generated May 01, 2014
7
+ #
8
+ # This configuration file is custom generated for Biola University
9
+
10
+
11
+ # Here are the settings that are common to all environments
12
+ common: &default_settings
13
+ # ============================== LICENSE KEY ===============================
14
+
15
+ # You must specify the license key associated with your New Relic
16
+ # account. This key binds your Agent's data to your account in the
17
+ # New Relic service.
18
+ license_key: # set in newrelic.yml
19
+
20
+ # Agent Enabled (Ruby/Rails Only)
21
+ # Use this setting to force the agent to run or not run.
22
+ # Default is 'auto' which means the agent will install and run only
23
+ # if a valid dispatcher such as Mongrel is running. This prevents
24
+ # it from running with Rake or the console. Set to false to
25
+ # completely turn the agent off regardless of the other settings.
26
+ # Valid values are true, false and auto.
27
+ #
28
+ # agent_enabled: auto
29
+
30
+ # Application Name Set this to be the name of your application as
31
+ # you'd like it show up in New Relic. The service will then auto-map
32
+ # instances of your application into an "application" on your
33
+ # dashboard page. If you want to map this instance into multiple
34
+ # apps, like "AJAX Requests" and "All UI" then specify a semicolon
35
+ # separated list of up to three distinct names, or a yaml list.
36
+ # Defaults to the capitalized RAILS_ENV or RACK_ENV (i.e.,
37
+ # Production, Staging, etc)
38
+ #
39
+ # Example:
40
+ #
41
+ # app_name:
42
+ # - Ajax Service
43
+ # - All Services
44
+ #
45
+ app_name: trogdir-api
46
+
47
+ # When "true", the agent collects performance data about your
48
+ # application and reports this data to the New Relic service at
49
+ # newrelic.com. This global switch is normally overridden for each
50
+ # environment below. (formerly called 'enabled')
51
+ monitor_mode: true
52
+
53
+ # Developer mode should be off in every environment but
54
+ # development as it has very high overhead in memory.
55
+ developer_mode: false
56
+
57
+ # The newrelic agent generates its own log file to keep its logging
58
+ # information separate from that of your application. Specify its
59
+ # log level here.
60
+ log_level: info
61
+
62
+ # Optionally set the path to the log file This is expanded from the
63
+ # root directory (may be relative or absolute, e.g. 'log/' or
64
+ # '/var/log/') The agent will attempt to create this directory if it
65
+ # does not exist.
66
+ # log_file_path: 'log'
67
+
68
+ # Optionally set the name of the log file, defaults to 'newrelic_agent.log'
69
+ # log_file_name: 'newrelic_agent.log'
70
+
71
+ # The newrelic agent communicates with the service via https by default. This
72
+ # prevents eavesdropping on the performance metrics transmitted by the agent.
73
+ # The encryption required by SSL introduces a nominal amount of CPU overhead,
74
+ # which is performed asynchronously in a background thread. If you'd prefer
75
+ # to send your metrics over http uncomment the following line.
76
+ # ssl: false
77
+
78
+ #============================== Browser Monitoring ===============================
79
+ # New Relic Real User Monitoring gives you insight into the performance real users are
80
+ # experiencing with your website. This is accomplished by measuring the time it takes for
81
+ # your users' browsers to download and render your web pages by injecting a small amount
82
+ # of JavaScript code into the header and footer of each page.
83
+ browser_monitoring:
84
+ # By default the agent automatically injects the monitoring JavaScript
85
+ # into web pages. Set this attribute to false to turn off this behavior.
86
+ auto_instrument: true
87
+
88
+ # Proxy settings for connecting to the New Relic server.
89
+ #
90
+ # If a proxy is used, the host setting is required. Other settings
91
+ # are optional. Default port is 8080.
92
+ #
93
+ # proxy_host: hostname
94
+ # proxy_port: 8080
95
+ # proxy_user:
96
+ # proxy_pass:
97
+
98
+ # The agent can optionally log all data it sends to New Relic servers to a
99
+ # separate log file for human inspection and auditing purposes. To enable this
100
+ # feature, change 'enabled' below to true.
101
+ # See: https://newrelic.com/docs/ruby/audit-log
102
+ audit_log:
103
+ enabled: false
104
+
105
+ # Tells transaction tracer and error collector (when enabled)
106
+ # whether or not to capture HTTP params. When true, frameworks can
107
+ # exclude HTTP parameters from being captured.
108
+ # Rails: the RoR filter_parameter_logging excludes parameters
109
+ # Java: create a config setting called "ignored_params" and set it to
110
+ # a comma separated list of HTTP parameter names.
111
+ # ex: ignored_params: credit_card, ssn, password
112
+ capture_params: false
113
+
114
+ # Transaction tracer captures deep information about slow
115
+ # transactions and sends this to the New Relic service once a
116
+ # minute. Included in the transaction is the exact call sequence of
117
+ # the transactions including any SQL statements issued.
118
+ transaction_tracer:
119
+
120
+ # Transaction tracer is enabled by default. Set this to false to
121
+ # turn it off. This feature is only available at the Professional
122
+ # and above product levels.
123
+ enabled: true
124
+
125
+ # Threshold in seconds for when to collect a transaction
126
+ # trace. When the response time of a controller action exceeds
127
+ # this threshold, a transaction trace will be recorded and sent to
128
+ # New Relic. Valid values are any float value, or (default) "apdex_f",
129
+ # which will use the threshold for an dissatisfying Apdex
130
+ # controller action - four times the Apdex T value.
131
+ transaction_threshold: apdex_f
132
+
133
+ # When transaction tracer is on, SQL statements can optionally be
134
+ # recorded. The recorder has three modes, "off" which sends no
135
+ # SQL, "raw" which sends the SQL statement in its original form,
136
+ # and "obfuscated", which strips out numeric and string literals.
137
+ record_sql: obfuscated
138
+
139
+ # Threshold in seconds for when to collect stack trace for a SQL
140
+ # call. In other words, when SQL statements exceed this threshold,
141
+ # then capture and send to New Relic the current stack trace. This is
142
+ # helpful for pinpointing where long SQL calls originate from.
143
+ stack_trace_threshold: 0.500
144
+
145
+ # Determines whether the agent will capture query plans for slow
146
+ # SQL queries. Only supported in mysql and postgres. Should be
147
+ # set to false when using other adapters.
148
+ # explain_enabled: true
149
+
150
+ # Threshold for query execution time below which query plans will
151
+ # not be captured. Relevant only when `explain_enabled` is true.
152
+ # explain_threshold: 0.5
153
+
154
+ # Error collector captures information about uncaught exceptions and
155
+ # sends them to New Relic for viewing
156
+ error_collector:
157
+
158
+ # Error collector is enabled by default. Set this to false to turn
159
+ # it off. This feature is only available at the Professional and above
160
+ # product levels.
161
+ enabled: true
162
+
163
+ # Rails Only - tells error collector whether or not to capture a
164
+ # source snippet around the place of the error when errors are View
165
+ # related.
166
+ capture_source: true
167
+
168
+ # To stop specific errors from reporting to New Relic, set this property
169
+ # to comma-separated values. Default is to ignore routing errors,
170
+ # which are how 404's get triggered.
171
+ ignore_errors: "ActionController::RoutingError,Sinatra::NotFound"
172
+
173
+ # If you're interested in capturing memcache keys as though they
174
+ # were SQL uncomment this flag. Note that this does increase
175
+ # overhead slightly on every memcached call, and can have security
176
+ # implications if your memcached keys are sensitive
177
+ # capture_memcache_keys: true
178
+
179
+ # Application Environments
180
+ # ------------------------------------------
181
+ # Environment-specific settings are in this section.
182
+ # For Rails applications, RAILS_ENV is used to determine the environment.
183
+ # For Java applications, pass -Dnewrelic.environment <environment> to set
184
+ # the environment.
185
+
186
+ # NOTE if your application has other named environments, you should
187
+ # provide newrelic configuration settings for these environments here.
188
+
189
+ development:
190
+ <<: *default_settings
191
+ # Turn off communication to New Relic service in development mode (also
192
+ # 'enabled').
193
+ # NOTE: for initial evaluation purposes, you may want to temporarily
194
+ # turn the agent on in development mode.
195
+ monitor_mode: false
196
+
197
+ # Rails Only - when running in Developer Mode, the New Relic Agent will
198
+ # present performance information on the last 100 transactions you have
199
+ # executed since starting the mongrel.
200
+ # NOTE: There is substantial overhead when running in developer mode.
201
+ # Do not use for production or load testing.
202
+ developer_mode: true
203
+
204
+ # Enable textmate links
205
+ # textmate: true
206
+
207
+ test:
208
+ <<: *default_settings
209
+ # It almost never makes sense to turn on the agent when running
210
+ # unit, functional or integration tests or the like.
211
+ monitor_mode: false
212
+
213
+ # Turn on the agent in production for 24x7 monitoring. NewRelic
214
+ # testing shows an average performance impact of < 5 ms per
215
+ # transaction, you can leave this on all the time without
216
+ # incurring any user-visible performance degradation.
217
+ production:
218
+ <<: *default_settings
219
+ monitor_mode: true
220
+
221
+ # Many applications have a staging environment which behaves
222
+ # identically to production. Support for that environment is provided
223
+ # here. By default, the staging environment has the agent turned on.
224
+ staging:
225
+ <<: *default_settings
226
+ monitor_mode: true
227
+ # app_name: My Application (Staging)
data/config.ru CHANGED
@@ -1,8 +1,14 @@
1
1
  require ::File.expand_path('../config/environment', __FILE__)
2
2
 
3
3
  if ENV['RACK_ENV'] == 'development'
4
+ require 'newrelic_rpm'
5
+ require 'new_relic/rack/developer_mode'
6
+ use NewRelic::Rack::DeveloperMode
7
+
4
8
  require 'better_errors'
5
9
  use BetterErrors::Middleware
6
10
  end
7
11
 
12
+ use Pinglish, &TrogdirAPI.pinglish_block
13
+
8
14
  run Trogdir::API
data/lib/trogdir/api.rb CHANGED
@@ -1,5 +1,19 @@
1
+ require 'new_relic/agent/instrumentation/rack'
2
+ require 'rack/turnout'
3
+
1
4
  module Trogdir
2
5
  class API < Grape::API
6
+ helpers ResponseHelpers
7
+ format :json
8
+ rescue_from :all
9
+
10
+ use Rack::Turnout
11
+
3
12
  mount Trogdir::V1::API
13
+
14
+ route(:any, '*path') { raise_404 }
15
+ route(:any, '/') { raise_404 }
16
+
17
+ include ::NewRelic::Agent::Instrumentation::Rack
4
18
  end
5
- end
19
+ end
@@ -1,20 +1,21 @@
1
1
  module Trogdir
2
2
  module V1
3
3
  class API < Grape::API
4
+ use ApiNewRelicInstrumenter
5
+
4
6
  version 'v1', using: :path
5
7
 
6
- format :json
7
8
  helpers RequestHelpers
8
- helpers ResponseHelpers
9
9
  helpers AuthenticationHelpers
10
10
 
11
11
  before { authenticate! }
12
12
 
13
13
  rescue_from Mongoid::Errors::DocumentNotFound do |e|
14
- error! "404 Not Found", 404
14
+ Rack::Response.new([{error: '404 Not Found'}.to_json], 404, {'Content-type' => 'application/json'})
15
15
  end
16
16
 
17
17
  mount PeopleAPI
18
+ mount GroupsAPI
18
19
  mount ChangeSyncsAPI
19
20
 
20
21
  resource 'people/:person_id' do
@@ -26,4 +27,4 @@ module Trogdir
26
27
  end
27
28
  end
28
29
  end
29
- end
30
+ end
@@ -11,9 +11,12 @@ module Trogdir
11
11
  end
12
12
 
13
13
  desc "Return and starts change_syncs that haven't been started"
14
+ params do
15
+ optional :limit, type: Integer, default: 100
16
+ end
14
17
  put :start do
15
18
  syncinator = current_syncinator
16
- changesets = syncinator.startable_changesets
19
+ changesets = syncinator.startable_changesets.limit params[:limit]
17
20
 
18
21
  sync_logs = changesets.map do |changeset|
19
22
  syncinator.start! changeset
@@ -1,52 +1,108 @@
1
1
  module Trogdir
2
2
  module V1
3
3
  class PersonEntity < Grape::Entity
4
- expose :ids, using: IDEntity, as: :ids
5
- expose :emails, using: EmailEntity, as: :emails
6
- expose :photos, using: PhotoEntity, as: :photos
7
- expose :phones, using: PhoneEntity, as: :phones
8
- expose :addresses, using: AddressEntity, as: :addresses
9
-
10
- expose :uuid
11
-
12
- # Names
13
- expose :first_name
14
- expose :preferred_name
15
- expose :middle_name
16
- expose :last_name
17
- expose :display_name
18
-
19
- # Demographic
20
- expose :gender
21
- expose :partial_ssn
22
- expose :birth_date
23
-
24
- # Groups and permissions
25
- expose :entitlements
26
- expose :affiliations
27
-
28
- # Options
29
- expose :enabled
30
-
31
- # STUDENT INFO #
32
-
33
- # On-Campus Residence
34
- expose :residence
35
- expose :floor
36
- expose :wing
37
-
38
- # Academic
39
- expose :majors
40
-
41
- # FERPA
42
- expose :privacy
43
-
44
- # EMPLOYEE INFO #
45
- expose :department
46
- expose :title
47
- expose :employee_type
48
- expose :full_time
49
- expose :pay_type
4
+ FIELDS = [
5
+ :uuid,
6
+
7
+ # Names
8
+ :first_name,
9
+ :preferred_name,
10
+ :middle_name,
11
+ :last_name,
12
+ :display_name,
13
+
14
+ # Demographic
15
+ :gender,
16
+ :partial_ssn,
17
+ :birth_date,
18
+
19
+ # Groups and permissions
20
+ :entitlements,
21
+ :affiliations,
22
+ :groups,
23
+
24
+ # Options
25
+ :enabled,
26
+
27
+ # STUDENT INFO #
28
+
29
+ # On-Campus Residence
30
+ :residence,
31
+ :floor,
32
+ :wing,
33
+
34
+ # Academic
35
+ :majors,
36
+
37
+ # FERPA
38
+ :privacy,
39
+
40
+ # EMPLOYEE INFO #
41
+ :department,
42
+ :title,
43
+ :employee_type,
44
+ :full_time,
45
+ :pay_type,
46
+
47
+ ids: [
48
+ :id,
49
+ :type,
50
+ :identifier
51
+ ],
52
+
53
+ emails: [
54
+ :id,
55
+ :type,
56
+ :address,
57
+ :primary
58
+ ],
59
+
60
+ photos: [
61
+ :id,
62
+ :type,
63
+ :url,
64
+ :height,
65
+ :width
66
+ ],
67
+
68
+ phones: [
69
+ :id,
70
+ :type,
71
+ :number,
72
+ :primary
73
+ ],
74
+
75
+ addresses: [
76
+ :id,
77
+ :type,
78
+ :street_1,
79
+ :street_2,
80
+ :city,
81
+ :state,
82
+ :zip,
83
+ :country
84
+ ]
85
+ ]
86
+
87
+ def serializable_hash(runtime_options = {})
88
+ build_hash(object, FIELDS)
89
+ end
90
+
91
+ private
92
+
93
+ def build_hash(object, fields)
94
+ fields.each_with_object({}) do |field, hash|
95
+ if field.is_a? Hash
96
+ field.each do |association, embed_fields|
97
+ hash[association] = object.send(association).map do |embed|
98
+ build_hash(embed, embed_fields)
99
+ end
100
+ end
101
+ else
102
+ hash[field] = object.send(field)
103
+ end
104
+ end
105
+ end
50
106
  end
51
107
  end
52
108
  end
@@ -4,6 +4,7 @@ module Trogdir
4
4
  expose(:sync_log_id) { |sync_log| sync_log.id }
5
5
  expose(:action) { |sync_log| sync_log.changeset.action }
6
6
  expose(:person_id) { |sync_log| sync_log.changeset.person.uuid }
7
+ expose(:affiliations) { |sync_log| sync_log.changeset.person.affiliations }
7
8
  expose(:scope) { |sync_log| sync_log.changeset.scope }
8
9
  expose(:original) { |sync_log| sync_log.changeset.original }
9
10
  expose(:modified) { |sync_log| sync_log.changeset.modified }
@@ -0,0 +1,51 @@
1
+ module Trogdir
2
+ module V1
3
+ class GroupsAPI < Grape::API
4
+ resource :groups do
5
+ before do
6
+ if params[:identifier]
7
+ @person = if params[:type]
8
+ elem_match_or_404 Person, ids: {type: params[:type], identifier: params[:identifier]}
9
+ else
10
+ Person.find_by uuid: params[:identifier]
11
+ end
12
+ @groups = Array(@person.groups)
13
+ end
14
+ end
15
+
16
+ desc 'Get the people in a group'
17
+ params do
18
+ requires :group, type: String
19
+ end
20
+ get ':group/people' do
21
+ people = Person.where(groups: params[:group])
22
+ present people, with: PersonEntity, serializable: true
23
+ end
24
+
25
+ desc 'Add a person to a group'
26
+ params do
27
+ requires :group, type: String
28
+ requires :identifier, type: String, desc: 'Person identifier'
29
+ optional :type, type: Symbol, values: ID::TYPES, desc: 'Person identifier type'
30
+ end
31
+ put ':group/add' do
32
+ @person.groups = (@groups + [params[:group]]).uniq
33
+
34
+ {result: @person.save && @person.groups.length == @groups.length + 1}
35
+ end
36
+
37
+ desc 'Remove a person from a group'
38
+ params do
39
+ requires :group, type: String
40
+ requires :identifier, type: String, desc: 'Person identifier'
41
+ optional :type, type: Symbol, values: ID::TYPES, desc: 'Person identifier type'
42
+ end
43
+ put ':group/remove' do
44
+ @person.groups = (@groups - [params[:group]]).uniq
45
+
46
+ {result: @person.save && @person.groups.length == @groups.length - 1}
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -17,7 +17,7 @@ module Trogdir
17
17
 
18
18
  conditions[:affiliations] = params[:affiliation].to_s if params[:affiliation]
19
19
 
20
- present Person.where(conditions), with: PersonEntity
20
+ present Person.where(conditions), with: PersonEntity, serializable: true
21
21
  end
22
22
 
23
23
  desc 'Return a person by associated id', {params: PersonEntity.documentation.except(:enabled)}
@@ -56,6 +56,7 @@ module Trogdir
56
56
  # Groups and permissions
57
57
  optional :entitlements, type: Array
58
58
  optional :affiliations, type: Array
59
+ optional :groups, type: Array
59
60
 
60
61
  # STUDENT INFO #
61
62
 
@@ -98,6 +99,7 @@ module Trogdir
98
99
  # Groups and permissions
99
100
  optional :entitlements, type: Array
100
101
  optional :affiliations, type: Array
102
+ optional :groups, type: Array
101
103
 
102
104
  # STUDENT INFO #
103
105
 
@@ -127,4 +129,4 @@ module Trogdir
127
129
  end
128
130
  end
129
131
  end
130
- end
132
+ end
@@ -2,6 +2,7 @@ module Trogdir
2
2
  module V1
3
3
  autoload :API, File.expand_path('../v1/api', __FILE__)
4
4
  autoload :ChangeSyncsAPI, File.expand_path('../v1/change_syncs_api', __FILE__)
5
+ autoload :GroupsAPI, File.expand_path('../v1/groups_api', __FILE__)
5
6
  autoload :PeopleAPI, File.expand_path('../v1/people_api', __FILE__)
6
7
  autoload :IDsAPI, File.expand_path('../v1/ids_api', __FILE__)
7
8
  autoload :EmailsAPI, File.expand_path('../v1/emails_api', __FILE__)
@@ -17,4 +18,4 @@ module Trogdir
17
18
  autoload :PhoneEntity, File.expand_path('../v1/entities/phone', __FILE__)
18
19
  autoload :AddressEntity, File.expand_path('../v1/entities/address', __FILE__)
19
20
  end
20
- end
21
+ end
@@ -0,0 +1,44 @@
1
+ require 'newrelic_rpm'
2
+
3
+ # Taken from https://gist.github.com/dblock/4170469
4
+ class ApiNewRelicInstrumenter < Grape::Middleware::Base
5
+ include NewRelic::Agent::Instrumentation::ControllerInstrumentation
6
+
7
+ def call_with_newrelic(&block)
8
+ trace_options = {
9
+ :category => :rack,
10
+ :path => "#{route_path}\##{route_method}",
11
+ :request => Rack::Request.new(env)
12
+ }
13
+
14
+ perform_action_with_newrelic_trace(trace_options) do
15
+ result = yield
16
+ MetricFrame.abort_transaction! if result.first == 404 # ignore cascaded calls
17
+ result
18
+ end
19
+ end
20
+
21
+ def call(env)
22
+ @env = env
23
+ call_with_newrelic do
24
+ super
25
+ end
26
+ end
27
+
28
+ def env
29
+ @env
30
+ end
31
+
32
+ def route
33
+ env['api.endpoint'].routes.first
34
+ end
35
+
36
+ def route_method
37
+ route.route_method.downcase
38
+ end
39
+
40
+ def route_path
41
+ path = route.route_path.gsub(/^.+:version\/|^\/|:|\(.+\)/, '').tr('/', '-')
42
+ "api.#{route.route_version}.#{path}"
43
+ end
44
+ end
@@ -0,0 +1,11 @@
1
+ require 'pinglish'
2
+
3
+ module TrogdirAPI
4
+ def self.pinglish_block
5
+ Proc.new do |ping|
6
+ ping.check :mongodb do
7
+ Mongoid.default_session.command(ping: 1).has_key? 'ok'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module TrogdirAPI
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/trogdir_api.rb CHANGED
@@ -1,15 +1,27 @@
1
1
  require 'grape'
2
2
  require 'grape-entity'
3
+ require 'oj'
3
4
  require 'api_auth'
4
5
  require 'trogdir_models'
6
+ require 'turnout'
5
7
 
6
8
  module TrogdirAPI
7
9
  def self.initialize!
8
10
  ENV['RACK_ENV'] ||= 'development'
9
11
 
12
+ MultiJson.use :oj
13
+
10
14
  mongoid_yml_path = File.expand_path('../../config/mongoid.yml', __FILE__)
11
15
  mongoid_yml_path = "#{mongoid_yml_path}.example" if !File.exists? mongoid_yml_path
12
16
  Mongoid.load! mongoid_yml_path
17
+
18
+ Turnout.configure do |config|
19
+ config.named_maintenance_file_paths.merge! server: '/tmp/turnout.yml'
20
+ config.default_maintenance_page = Turnout::MaintenancePage::JSON
21
+ end
22
+
23
+ require File.expand_path('../trogdir_api/pinglish', __FILE__)
24
+ require File.expand_path('../trogdir_api/newrelic', __FILE__)
13
25
  end
14
26
  end
15
27
 
@@ -19,4 +31,4 @@ module Trogdir
19
31
  autoload :RequestHelpers, File.expand_path('../trogdir/helpers/request_helpers', __FILE__)
20
32
  autoload :API, File.expand_path('../trogdir/api', __FILE__)
21
33
  autoload :V1, File.expand_path('../trogdir/versions/v1', __FILE__)
22
- end
34
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trogdir_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Crownoble
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-09 00:00:00.000000000 Z
11
+ date: 2014-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: api-auth
@@ -75,9 +75,13 @@ files:
75
75
  - MIT-LICENSE
76
76
  - README.md
77
77
  - config.ru
78
+ - config/blazing.rb
79
+ - config/blazing.rb.example
78
80
  - config/environment.rb
79
81
  - config/mongoid.yml
80
82
  - config/mongoid.yml.example
83
+ - config/newrelic.yml
84
+ - config/newrelic.yml.example
81
85
  - lib/trogdir/api.rb
82
86
  - lib/trogdir/helpers/authentication_helpers.rb
83
87
  - lib/trogdir/helpers/request_helpers.rb
@@ -95,11 +99,14 @@ files:
95
99
  - lib/trogdir/versions/v1/entities/photo.rb
96
100
  - lib/trogdir/versions/v1/entities/sync_log.rb
97
101
  - lib/trogdir/versions/v1/entities/sync_log_with_changeset.rb
102
+ - lib/trogdir/versions/v1/groups_api.rb
98
103
  - lib/trogdir/versions/v1/ids_api.rb
99
104
  - lib/trogdir/versions/v1/people_api.rb
100
105
  - lib/trogdir/versions/v1/phones_api.rb
101
106
  - lib/trogdir/versions/v1/photos_api.rb
102
107
  - lib/trogdir_api.rb
108
+ - lib/trogdir_api/newrelic.rb
109
+ - lib/trogdir_api/pinglish.rb
103
110
  - lib/trogdir_api/version.rb
104
111
  homepage: https://github.com/biola/trogdir-api
105
112
  licenses:
@@ -126,3 +133,4 @@ signing_key:
126
133
  specification_version: 4
127
134
  summary: Trogdir directory API
128
135
  test_files: []
136
+ has_rdoc: