supplejack_api 1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +80 -0
  3. data/Rakefile +42 -0
  4. data/app/assets/javascripts/supplejack_api/application.js +26 -0
  5. data/app/assets/stylesheets/supplejack_api/application.css +30 -0
  6. data/app/controllers/supplejack_api/admin/base_controller.rb +24 -0
  7. data/app/controllers/supplejack_api/admin/sessions_controller.rb +25 -0
  8. data/app/controllers/supplejack_api/admin/site_activities_controller.rb +21 -0
  9. data/app/controllers/supplejack_api/admin/users_controller.rb +55 -0
  10. data/app/controllers/supplejack_api/application_controller.rb +70 -0
  11. data/app/controllers/supplejack_api/concepts_controller.rb +52 -0
  12. data/app/controllers/supplejack_api/concerns/ignore_metrics.rb +14 -0
  13. data/app/controllers/supplejack_api/concerns/records_controller_metrics.rb +26 -0
  14. data/app/controllers/supplejack_api/concerns/set_items_controller_metrics.rb +20 -0
  15. data/app/controllers/supplejack_api/concerns/user_sets_controller_metrics.rb +26 -0
  16. data/app/controllers/supplejack_api/harvester/concepts_controller.rb +41 -0
  17. data/app/controllers/supplejack_api/harvester/fragments_controller.rb +30 -0
  18. data/app/controllers/supplejack_api/harvester/records_controller.rb +68 -0
  19. data/app/controllers/supplejack_api/metrics_api_controller.rb +44 -0
  20. data/app/controllers/supplejack_api/partners_controller.rb +39 -0
  21. data/app/controllers/supplejack_api/records_controller.rb +71 -0
  22. data/app/controllers/supplejack_api/schema_controller.rb +19 -0
  23. data/app/controllers/supplejack_api/set_items_controller.rb +38 -0
  24. data/app/controllers/supplejack_api/sources_controller.rb +67 -0
  25. data/app/controllers/supplejack_api/status_controller.rb +67 -0
  26. data/app/controllers/supplejack_api/user_sets_controller.rb +97 -0
  27. data/app/controllers/supplejack_api/users_controller.rb +49 -0
  28. data/app/helpers/supplejack_api/application_helper.rb +39 -0
  29. data/app/helpers/supplejack_api/facets_helper.rb +30 -0
  30. data/app/mailers/supplejack_api/request_limit_mailer.rb +43 -0
  31. data/app/models/supplejack_api/api_concept/concept_fragment.rb +31 -0
  32. data/app/models/supplejack_api/api_record/record_fragment.rb +15 -0
  33. data/app/models/supplejack_api/concept.rb +46 -0
  34. data/app/models/supplejack_api/concept_search.rb +86 -0
  35. data/app/models/supplejack_api/concerns/queryable_by_date.rb +31 -0
  36. data/app/models/supplejack_api/concerns/record.rb +108 -0
  37. data/app/models/supplejack_api/concerns/record_fragmentable.rb +24 -0
  38. data/app/models/supplejack_api/concerns/searchable.rb +430 -0
  39. data/app/models/supplejack_api/concerns/user_set.rb +219 -0
  40. data/app/models/supplejack_api/daily_metrics.rb +20 -0
  41. data/app/models/supplejack_api/faceted_metrics.rb +55 -0
  42. data/app/models/supplejack_api/fragment.rb +82 -0
  43. data/app/models/supplejack_api/interaction_models/record.rb +60 -0
  44. data/app/models/supplejack_api/interaction_models/set.rb +13 -0
  45. data/app/models/supplejack_api/interaction_updaters/all_usage_metric.rb +41 -0
  46. data/app/models/supplejack_api/interaction_updaters/set_metrics.rb +32 -0
  47. data/app/models/supplejack_api/interaction_updaters/usage_metrics.rb +73 -0
  48. data/app/models/supplejack_api/partner.rb +24 -0
  49. data/app/models/supplejack_api/preview_record.rb +30 -0
  50. data/app/models/supplejack_api/record.rb +18 -0
  51. data/app/models/supplejack_api/record_search.rb +12 -0
  52. data/app/models/supplejack_api/schema_definition.rb +147 -0
  53. data/app/models/supplejack_api/search.rb +14 -0
  54. data/app/models/supplejack_api/set_item.rb +57 -0
  55. data/app/models/supplejack_api/site_activity.rb +59 -0
  56. data/app/models/supplejack_api/source.rb +28 -0
  57. data/app/models/supplejack_api/source_activity.rb +36 -0
  58. data/app/models/supplejack_api/source_authority.rb +42 -0
  59. data/app/models/supplejack_api/supplejack_schema.rb +37 -0
  60. data/app/models/supplejack_api/support/concept/searchable.rb +79 -0
  61. data/app/models/supplejack_api/support/concept/storable.rb +59 -0
  62. data/app/models/supplejack_api/support/fragment_helpers.rb +96 -0
  63. data/app/models/supplejack_api/support/harvestable.rb +105 -0
  64. data/app/models/supplejack_api/support/searchable.rb +115 -0
  65. data/app/models/supplejack_api/support/status_logger.rb +23 -0
  66. data/app/models/supplejack_api/support/storable.rb +49 -0
  67. data/app/models/supplejack_api/support/validation_logger.rb +23 -0
  68. data/app/models/supplejack_api/usage_metrics.rb +25 -0
  69. data/app/models/supplejack_api/user.rb +211 -0
  70. data/app/models/supplejack_api/user_activity.rb +65 -0
  71. data/app/models/supplejack_api/user_set.rb +17 -0
  72. data/app/serializers/supplejack_api/application_serializer.rb +12 -0
  73. data/app/serializers/supplejack_api/concept_record_serializer.rb +23 -0
  74. data/app/serializers/supplejack_api/concept_search_serializer.rb +12 -0
  75. data/app/serializers/supplejack_api/concept_serializer.rb +100 -0
  76. data/app/serializers/supplejack_api/concerns/record_serializable.rb +119 -0
  77. data/app/serializers/supplejack_api/concerns/search_serializable.rb +24 -0
  78. data/app/serializers/supplejack_api/record_search_serializer.rb +64 -0
  79. data/app/serializers/supplejack_api/record_serializer.rb +13 -0
  80. data/app/serializers/supplejack_api/search_serializer.rb +13 -0
  81. data/app/serializers/supplejack_api/source_authority_serializer.rb +23 -0
  82. data/app/serializers/supplejack_api/user_serializer.rb +13 -0
  83. data/app/serializers/supplejack_api/user_set_record_serializer.rb +14 -0
  84. data/app/serializers/supplejack_api/user_set_serializer.rb +77 -0
  85. data/app/services/metrics_api/v3/api.rb +30 -0
  86. data/app/services/metrics_api/v3/endpoints/facets.rb +23 -0
  87. data/app/services/metrics_api/v3/endpoints/global.rb +26 -0
  88. data/app/services/metrics_api/v3/endpoints/helpers.rb +14 -0
  89. data/app/services/metrics_api/v3/endpoints/root.rb +97 -0
  90. data/app/services/metrics_api/v3/presenters/daily_metric.rb +23 -0
  91. data/app/services/metrics_api/v3/presenters/extended_metadata.rb +41 -0
  92. data/app/services/metrics_api/v3/presenters/record.rb +26 -0
  93. data/app/services/metrics_api/v3/presenters/view.rb +28 -0
  94. data/app/views/layouts/supplejack_api/_head.html.erb +17 -0
  95. data/app/views/layouts/supplejack_api/_top_nav.html.erb +33 -0
  96. data/app/views/layouts/supplejack_api/application.html.erb +33 -0
  97. data/app/views/supplejack_api/admin/sessions/new.html.erb +25 -0
  98. data/app/views/supplejack_api/admin/shared/_links.erb +34 -0
  99. data/app/views/supplejack_api/admin/site_activities/index.csv.erb +22 -0
  100. data/app/views/supplejack_api/admin/site_activities/index.html.erb +54 -0
  101. data/app/views/supplejack_api/admin/users/edit.html.erb +16 -0
  102. data/app/views/supplejack_api/admin/users/index.csv.erb +22 -0
  103. data/app/views/supplejack_api/admin/users/index.html.erb +57 -0
  104. data/app/views/supplejack_api/admin/users/show.html.erb +33 -0
  105. data/app/views/supplejack_api/request_limit_mailer/at100percent.text.erb +13 -0
  106. data/app/views/supplejack_api/request_limit_mailer/at100percent_admin.text.erb +1 -0
  107. data/app/views/supplejack_api/request_limit_mailer/at90percent.text.erb +13 -0
  108. data/app/views/supplejack_api/request_limit_mailer/at90percent_admin.text.erb +1 -0
  109. data/app/workers/supplejack_api/daily_metrics_worker.rb +112 -0
  110. data/app/workers/supplejack_api/interaction_metrics_worker.rb +45 -0
  111. data/config/cucumber.yml +16 -0
  112. data/config/initializers/force_eagerload.rb +11 -0
  113. data/config/initializers/interaction_updaters.rb +7 -0
  114. data/config/routes.rb +81 -0
  115. data/db/binding_records.development.json +7 -0
  116. data/db/binding_records.staging.json +7 -0
  117. data/db/concepts.json +33 -0
  118. data/db/concepts_data.json +569745 -0
  119. data/db/source_authorities.json +119 -0
  120. data/lib/generators/supplejack_api/install_generator.rb +124 -0
  121. data/lib/mongoid/paperclip.rb +53 -0
  122. data/lib/mongoid/string.rb +20 -0
  123. data/lib/sunspot/mongoid.rb +51 -0
  124. data/lib/sunspot/resque_session_proxy.rb +72 -0
  125. data/lib/sunspot/sunspot_spellcheck.rb +98 -0
  126. data/lib/supplejack_api.rb +13 -0
  127. data/lib/supplejack_api/admin/sortable.rb +40 -0
  128. data/lib/supplejack_api/engine.rb +46 -0
  129. data/lib/supplejack_api/harvester_constraint.rb +28 -0
  130. data/lib/supplejack_api/stylesheets.rb +36 -0
  131. data/lib/supplejack_api/utils.rb +75 -0
  132. data/lib/supplejack_api/version.rb +11 -0
  133. data/lib/tasks/resque.rake +22 -0
  134. data/lib/url_validator.rb +38 -0
  135. data/spec/controllers/supplejack_api/admin/base_controller_spec.rb +55 -0
  136. data/spec/controllers/supplejack_api/admin/site_activities_controller_spec.rb +43 -0
  137. data/spec/controllers/supplejack_api/admin/users_controller_spec.rb +79 -0
  138. data/spec/controllers/supplejack_api/application_controller_spec.rb +133 -0
  139. data/spec/controllers/supplejack_api/concepts_controller_spec.rb +83 -0
  140. data/spec/controllers/supplejack_api/concerns/records_controller_metrics_spec.rb +60 -0
  141. data/spec/controllers/supplejack_api/harvester/concepts_controller_spec.rb +57 -0
  142. data/spec/controllers/supplejack_api/harvester/records_controller_spec.rb +138 -0
  143. data/spec/controllers/supplejack_api/metrics_api_controller_spec.rb +71 -0
  144. data/spec/controllers/supplejack_api/partners_controller_spec.rb +77 -0
  145. data/spec/controllers/supplejack_api/records_controller_spec.rb +143 -0
  146. data/spec/controllers/supplejack_api/set_items_controller_spec.rb +78 -0
  147. data/spec/controllers/supplejack_api/sources_controller_spec.rb +161 -0
  148. data/spec/controllers/supplejack_api/status_controller_spec.rb +120 -0
  149. data/spec/controllers/supplejack_api/user_sets_controller_spec.rb +233 -0
  150. data/spec/controllers/supplejack_api/users_controller_spec.rb +61 -0
  151. data/spec/dummy/README.rdoc +268 -0
  152. data/spec/dummy/Rakefile +7 -0
  153. data/spec/dummy/app/assets/javascripts/application.js +23 -0
  154. data/spec/dummy/app/assets/stylesheets/application.css +22 -0
  155. data/spec/dummy/app/controllers/application_controller.rb +10 -0
  156. data/spec/dummy/app/helpers/application_helper.rb +9 -0
  157. data/spec/dummy/app/supplejack_api/concept_schema.rb +83 -0
  158. data/spec/dummy/app/supplejack_api/record_schema.rb +64 -0
  159. data/spec/dummy/app/supplejack_api/record_schema.txt +66 -0
  160. data/spec/dummy/app/views/layouts/application.html.erb +23 -0
  161. data/spec/dummy/app/workers/supplejack_api/clear_index_buffer.rb +32 -0
  162. data/spec/dummy/app/workers/supplejack_api/flush_old_records_worker.rb +17 -0
  163. data/spec/dummy/app/workers/supplejack_api/index_buffer.rb +49 -0
  164. data/spec/dummy/app/workers/supplejack_api/index_source_worker.rb +39 -0
  165. data/spec/dummy/app/workers/supplejack_api/index_worker.rb +82 -0
  166. data/spec/dummy/app/workers/supplejack_api/store_user_activity_worker.rb +24 -0
  167. data/spec/dummy/config.ru +11 -0
  168. data/spec/dummy/config/application.rb +76 -0
  169. data/spec/dummy/config/application.yml +31 -0
  170. data/spec/dummy/config/application.yml.example +36 -0
  171. data/spec/dummy/config/boot.rb +17 -0
  172. data/spec/dummy/config/environment.rb +12 -0
  173. data/spec/dummy/config/environments/development.rb +42 -0
  174. data/spec/dummy/config/environments/production.rb +76 -0
  175. data/spec/dummy/config/environments/test.rb +46 -0
  176. data/spec/dummy/config/initializers/backtrace_silencers.rb +14 -0
  177. data/spec/dummy/config/initializers/devise.rb +214 -0
  178. data/spec/dummy/config/initializers/inflections.rb +22 -0
  179. data/spec/dummy/config/initializers/kaminari_config.rb +17 -0
  180. data/spec/dummy/config/initializers/mime_types.rb +12 -0
  181. data/spec/dummy/config/initializers/mongoid.rb +9 -0
  182. data/spec/dummy/config/initializers/quiet_logger.rb +23 -0
  183. data/spec/dummy/config/initializers/resque.rb +18 -0
  184. data/spec/dummy/config/initializers/secret_token.rb +14 -0
  185. data/spec/dummy/config/initializers/session_store.rb +15 -0
  186. data/spec/dummy/config/initializers/simple_form.rb +149 -0
  187. data/spec/dummy/config/initializers/simple_form_foundation.rb +33 -0
  188. data/spec/dummy/config/initializers/state_machine.rb +8 -0
  189. data/spec/dummy/config/initializers/sunspot.rb +32 -0
  190. data/spec/dummy/config/initializers/wrap_parameters.rb +17 -0
  191. data/spec/dummy/config/locales/devise.en.yml +63 -0
  192. data/spec/dummy/config/locales/en.yml +66 -0
  193. data/spec/dummy/config/locales/simple_form.en.yml +33 -0
  194. data/spec/dummy/config/mongoid.travis.yml +34 -0
  195. data/spec/dummy/config/mongoid.yml +36 -0
  196. data/spec/dummy/config/resque-pool.yml +18 -0
  197. data/spec/dummy/config/resque_schedule.yml +12 -0
  198. data/spec/dummy/config/routes.rb +11 -0
  199. data/spec/dummy/config/secrets.yml +8 -0
  200. data/spec/dummy/config/sunspot.yml +38 -0
  201. data/spec/dummy/db/concepts.json +37 -0
  202. data/spec/dummy/db/source_authorities.json +116 -0
  203. data/spec/dummy/public/404.html +35 -0
  204. data/spec/dummy/public/422.html +35 -0
  205. data/spec/dummy/public/500.html +34 -0
  206. data/spec/dummy/public/favicon.ico +8 -0
  207. data/spec/dummy/script/rails +6 -0
  208. data/spec/dummy/solr/collection1/conf/elevate.xml +36 -0
  209. data/spec/dummy/solr/collection1/conf/mapping-FoldToASCII.txt +3813 -0
  210. data/spec/dummy/solr/collection1/conf/schema.xml +292 -0
  211. data/spec/dummy/solr/collection1/conf/solrconfig.xml +1780 -0
  212. data/spec/dummy/solr/collection1/conf/spellings.txt +2 -0
  213. data/spec/dummy/solr/collection1/conf/stopwords.txt +58 -0
  214. data/spec/dummy/solr/collection1/conf/synonyms.txt +31 -0
  215. data/spec/factories/concepts.rb +16 -0
  216. data/spec/factories/daily_metrics.rb +10 -0
  217. data/spec/factories/faceted_metrics.rb +25 -0
  218. data/spec/factories/fragment.rb +14 -0
  219. data/spec/factories/partners.rb +14 -0
  220. data/spec/factories/record_interaction.rb +17 -0
  221. data/spec/factories/records.rb +47 -0
  222. data/spec/factories/set_interaction.rb +15 -0
  223. data/spec/factories/source_authorities.rb +19 -0
  224. data/spec/factories/sources.rb +16 -0
  225. data/spec/factories/usage_metrics.rb +20 -0
  226. data/spec/factories/user_activities.rb +14 -0
  227. data/spec/factories/user_sets.rb +27 -0
  228. data/spec/factories/users.rb +23 -0
  229. data/spec/helpers/application_helper_spec.rb +35 -0
  230. data/spec/models/concept_spec.rb +163 -0
  231. data/spec/models/fragment_spec.rb +15 -0
  232. data/spec/models/site_activity_spec.rb +103 -0
  233. data/spec/models/source_activity_spec.rb +56 -0
  234. data/spec/models/source_authority_spec.rb +42 -0
  235. data/spec/models/supplejack_api/api_concept/concept_fragment_spec.rb +189 -0
  236. data/spec/models/supplejack_api/api_record/record_fragment_spec.rb +189 -0
  237. data/spec/models/supplejack_api/concept_spec.rb +0 -0
  238. data/spec/models/supplejack_api/interaction_updaters/all_usage_metric_spec.rb +41 -0
  239. data/spec/models/supplejack_api/interaction_updaters/set_metrics_spec.rb +32 -0
  240. data/spec/models/supplejack_api/interaction_updaters/usage_metrics_spec.rb +44 -0
  241. data/spec/models/supplejack_api/partner_spec.rb +20 -0
  242. data/spec/models/supplejack_api/record_search_spec.rb +429 -0
  243. data/spec/models/supplejack_api/record_spec.rb +280 -0
  244. data/spec/models/supplejack_api/schema_definition_spec.rb +272 -0
  245. data/spec/models/supplejack_api/search_spec.rb +243 -0
  246. data/spec/models/supplejack_api/set_item_spec.rb +123 -0
  247. data/spec/models/supplejack_api/source_spec.rb +22 -0
  248. data/spec/models/supplejack_api/support/fragment_helpers_spec.rb +216 -0
  249. data/spec/models/supplejack_api/support/harvestable_spec.rb +177 -0
  250. data/spec/models/supplejack_api/support/searchable_spec.rb +85 -0
  251. data/spec/models/supplejack_api/support/storable_spec.rb +18 -0
  252. data/spec/models/supplejack_api/user_activity_spec.rb +88 -0
  253. data/spec/models/supplejack_api/user_set_spec.rb +559 -0
  254. data/spec/models/supplejack_api/user_spec.rb +348 -0
  255. data/spec/routing/concepts_routing_spec.rb +22 -0
  256. data/spec/routing/harvester_constraint_spec.rb +66 -0
  257. data/spec/routing/harvester_routing_spec.rb +51 -0
  258. data/spec/routing/partner_routing_spec.rb +34 -0
  259. data/spec/routing/records_routing_spec.rb +26 -0
  260. data/spec/routing/sets_routing_spec.rb +44 -0
  261. data/spec/routing/source_routing_spec.rb +38 -0
  262. data/spec/routing/users_routing_spec.rb +18 -0
  263. data/spec/serializers/concept_record_serializer_spec.rb +30 -0
  264. data/spec/serializers/supplejack_api/application_serializer_spec.rb +14 -0
  265. data/spec/serializers/supplejack_api/concept_search_serializer_spec.rb +34 -0
  266. data/spec/serializers/supplejack_api/concept_serializer_spec.rb +92 -0
  267. data/spec/serializers/supplejack_api/record_search_serializer_spec.rb +34 -0
  268. data/spec/serializers/supplejack_api/record_serializer_spec.rb +271 -0
  269. data/spec/serializers/supplejack_api/search_serializer_spec.rb +90 -0
  270. data/spec/serializers/supplejack_api/user_serializer_spec.rb +22 -0
  271. data/spec/serializers/supplejack_api/user_set_serializer_spec.rb +96 -0
  272. data/spec/services/metrics_api/v3/api_spec.rb +23 -0
  273. data/spec/services/metrics_api/v3/endpoints/facets_spec.rb +25 -0
  274. data/spec/services/metrics_api/v3/endpoints/global_spec.rb +22 -0
  275. data/spec/services/metrics_api/v3/endpoints/root_spec.rb +49 -0
  276. data/spec/services/metrics_api/v3/presenters/extended_metadata_spec.rb +49 -0
  277. data/spec/spec_helper.rb +70 -0
  278. data/spec/support/api/schemas/metrics/daily_metrics_metadata.json +24 -0
  279. data/spec/support/api/schemas/metrics/extended_metrics.json +26 -0
  280. data/spec/support/api/schemas/metrics/extended_response.json +6 -0
  281. data/spec/support/api/schemas/metrics/facets_response.json +6 -0
  282. data/spec/support/api/schemas/metrics/record_metadata.json +33 -0
  283. data/spec/support/api/schemas/metrics/top_level_response.json +6 -0
  284. data/spec/support/api/schemas/metrics/view_metadata.json +33 -0
  285. data/spec/support/api_schema_matcher.rb +14 -0
  286. data/spec/support/devise.rb +10 -0
  287. data/spec/workers/supplejack_api/daily_metrics_worker_spec.rb +140 -0
  288. data/spec/workers/supplejack_api/flush_old_records_worker_spec.rb +20 -0
  289. data/spec/workers/supplejack_api/index_worker_spec.rb +52 -0
  290. data/spec/workers/supplejack_api/source_index_worker_spec.rb +61 -0
  291. metadata +1231 -0
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+ module MetricsApi
3
+ module V3
4
+ module Presenters
5
+ # Presents a +SupplejackApi::UsageMetrics+ ready to be returned via the API
6
+ class View
7
+ def initialize(metric)
8
+ @m = metric
9
+ end
10
+
11
+ def to_json
12
+ {
13
+ id: @m.record_field_value,
14
+ searches: @m.searches,
15
+ record_page_views: @m.gets,
16
+ user_set_views: @m.user_set_views,
17
+ total_views: @m.total_views,
18
+ records_added_to_user_sets: @m.records_added_to_user_sets
19
+ }
20
+ end
21
+
22
+ def self.to_proc
23
+ ->(metric) { new(metric).to_json }
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <head>
11
+ <title>SupplejackApi</title>
12
+ <meta charset="utf-8" />
13
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
14
+ <%= stylesheet_link_tag "supplejack_api/application", :media => "all" %>
15
+ <%= javascript_include_tag "supplejack_api/application" %>
16
+ <%= csrf_meta_tags %>
17
+ </head>
@@ -0,0 +1,33 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <div class="top-bar" data-topbar>
11
+ <div class="row">
12
+ <ul class="title-area">
13
+ <li class="name">
14
+ <h1><%= link_to t('admin.title'), '#' %></h1>
15
+ </li>
16
+ </ul>
17
+
18
+ <% if admin_user_signed_in? %>
19
+ <section class="top-bar-section">
20
+ <!-- Right Nav Section -->
21
+ <ul class="right">
22
+ <li><%= link_to t('users.log_out'), destroy_admin_user_session_path, method: :delete %></li>
23
+ </ul>
24
+
25
+ <!-- Left Nav Section -->
26
+ <ul class="left">
27
+ <li><%= link_to t('users.title'), admin_users_path %></li>
28
+ <li><%= link_to t('site_activities.title'), admin_site_activities_path %></li>
29
+ </ul>
30
+ </section>
31
+ <% end %>
32
+ </div>
33
+ </div>
@@ -0,0 +1,33 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <!DOCTYPE html>
11
+ <!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
12
+ <!--[if lt IE 7 ]> <html class="ie6" lang="en"> <![endif]-->
13
+ <!--[if IE 7 ]> <html class="ie7" lang="en"> <![endif]-->
14
+ <!--[if IE 8 ]> <html class="ie8" lang="en"> <![endif]-->
15
+ <!--[if (gte IE 9)|!(IE)]><!--> <html lang="en"> <!--<![endif]-->
16
+ <%= render 'layouts/supplejack_api/head' %>
17
+ <body>
18
+ <%= render 'layouts/supplejack_api/top_nav' %>
19
+
20
+ <%= flash.map do |type, message|
21
+ type = :success if type.to_s == "notice"
22
+ content_tag(:div, message, class: "alert-box #{type} margin-top")
23
+ end.join.html_safe
24
+ %>
25
+
26
+ <div class="row">
27
+ <br />
28
+ <%= yield %>
29
+ </div>
30
+
31
+ <footer></footer>
32
+ </body>
33
+ </html>
@@ -0,0 +1,25 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <div class="row">
11
+ <h2>Sign in</h2>
12
+
13
+ <%= simple_form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
14
+ <div class="form-inputs">
15
+ <%= f.input :email, :required => false, :autofocus => true %>
16
+ <%= f.input :password, :required => false %>
17
+ </div>
18
+
19
+ <div class="form-actions">
20
+ <%= f.button :submit, 'Sign in', class: 'button' %>
21
+ </div>
22
+ <% end %>
23
+
24
+ <%= render 'supplejack_api/admin/shared/links' %>
25
+ </div>
@@ -0,0 +1,34 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <%- if controller_name != 'sessions' %>
11
+ <%= link_to "Sign in", new_session_path(resource_name) %><br />
12
+ <% end -%>
13
+
14
+ <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
15
+ <%= link_to "Sign up", new_registration_path(resource_name) %><br />
16
+ <% end -%>
17
+
18
+ <%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
19
+ <%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
20
+ <% end -%>
21
+
22
+ <%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
23
+ <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
24
+ <% end -%>
25
+
26
+ <%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
27
+ <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
28
+ <% end -%>
29
+
30
+ <%- if devise_mapping.omniauthable? %>
31
+ <%- resource_class.omniauth_providers.each do |provider| %>
32
+ <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br />
33
+ <% end -%>
34
+ <% end -%>
@@ -0,0 +1,22 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <%-
11
+ require 'csv'
12
+
13
+ csv_output = CSV.generate(:col_sep => ",") do |csv|
14
+ columns = SupplejackApi::SiteActivity.activities
15
+
16
+ csv << columns
17
+ SupplejackApi::SiteActivity.all.each do |site_activity|
18
+ csv << columns.map {|c| site_activity.send(c) }
19
+ end
20
+ end
21
+ %>
22
+ <%= csv_output.html_safe %>
@@ -0,0 +1,54 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <div class="row">
11
+ <div class="large-12 columns">
12
+ <div class="left">
13
+ <h1><%= t('site_activities.title') %></h1>
14
+ </div>
15
+ <div class="right">
16
+ <%= link_to t('admin.download_csv'), admin_site_activities_path(format: :csv), class: 'button' %>
17
+ </div>
18
+ </div>
19
+ </div>
20
+
21
+ <div class="row">
22
+ <div class="large-12 columns">
23
+ <div class="site-activities">
24
+ <table class="table">
25
+ <thead>
26
+ <tr>
27
+ <% SupplejackApi::SiteActivity.activities.each do |activity| %>
28
+ <th><%= sortable 'site_activity', activity.to_s %></th>
29
+ <% end %>
30
+ </tr>
31
+ </thead>
32
+
33
+ <tbody>
34
+ <% @site_activities.each do |activity| %>
35
+ <tr>
36
+ <td><%= l(activity.date) %></td>
37
+ <td><%= number_with_delimiter activity.search %></td>
38
+ <td><%= number_with_delimiter activity.user_sets %></td>
39
+ <td><%= number_with_delimiter activity.records %></td>
40
+ <td><%= number_with_delimiter activity.source_clicks %></td>
41
+ <td><%= number_with_delimiter activity.total %></td>
42
+ </tr>
43
+ <% end %>
44
+ </tbody>
45
+ </table>
46
+ </div>
47
+ </div>
48
+ </div>
49
+
50
+ <div class="row">
51
+ <div class="large-12 columns">
52
+ <%= paginate @site_activities %>
53
+ </div>
54
+ </div>
@@ -0,0 +1,16 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <div class="row">
11
+ <%= simple_form_for @user, url: admin_user_path(@user.id) do |f| %>
12
+ <h3><%= @user.email || @user.api_key %></h2>
13
+ <%= f.input :max_requests %>
14
+ <%= f.button :submit %>
15
+ <% end %>
16
+ </div>
@@ -0,0 +1,22 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <%-
11
+ require 'csv'
12
+
13
+ csv_output = CSV.generate(:col_sep => ",") do |csv|
14
+ columns = [:username, :name, :authentication_token, :email, :role, :daily_requests, :monthly_requests]
15
+
16
+ csv << columns
17
+ SupplejackApi::User.all.each do |user|
18
+ csv << columns.map {|c| user.send(c) }
19
+ end
20
+ end
21
+ %>
22
+ <%= csv_output.html_safe %>
@@ -0,0 +1,57 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <div class="row">
11
+ <div class="large-12 columns">
12
+ <div class="left">
13
+ <h1><%= t('users.title') %></h1>
14
+ </div>
15
+ <div class="right">
16
+ <%= link_to t('admin.download_csv'), admin_users_path(format: :csv), class: 'button' %>
17
+ </div>
18
+ </div>
19
+ </div>
20
+
21
+ <div class="row">
22
+ <div class="large-12 columns">
23
+ <div class="users">
24
+ <table class="table">
25
+ <thead>
26
+ <tr>
27
+ <th><%= sortable 'user', 'username' %></th>
28
+ <th><%= sortable 'user', 'name' %></th>
29
+ <th><%= sortable 'user', 'authentication_token' %></th>
30
+ <th><%= sortable 'user', 'email' %></th>
31
+ <th><%= sortable 'user', 'role' %></th>
32
+ <th><%= sortable 'user', 'daily_requests' %></th>
33
+ <th><%= sortable 'user', 'monthly_requests' %></th>
34
+ <th><%= sortable 'user', 'max_requests' %></th>
35
+ </tr>
36
+ </thead>
37
+
38
+ <tbody>
39
+ <% @users.each do |user| %>
40
+ <tr>
41
+ <td><%= user.username %></td>
42
+ <td><%= user.name %></td>
43
+ <td><%= link_to user.authentication_token, admin_user_path(user.id) %></td>
44
+ <td><%= user.email %></td>
45
+ <td><%= user.role %></td>
46
+ <td><%= number_with_delimiter user.daily_requests %></td>
47
+ <td><%= number_with_delimiter user.monthly_requests %></td>
48
+ <td><%= link_to user.max_requests, edit_admin_user_path(user.id) %></td>
49
+ </tr>
50
+ <% end %>
51
+ </tbody>
52
+ </table>
53
+ </div>
54
+
55
+ <%= paginate @users %>
56
+ </div>
57
+ </div>
@@ -0,0 +1,33 @@
1
+ <%#
2
+ The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ and is licensed under the GNU General Public License, version 3.
4
+ One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+
6
+ Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+ %>
9
+
10
+ <div class="row">
11
+ <div class="large-4 columns">
12
+ <h3><%= t('users.name') %></h3>
13
+ <h4 class="subheader"><%= @user.name %></h4>
14
+ </div>
15
+
16
+ <div class="large-4 columns">
17
+ <h3><%= t('users.username') %></h3>
18
+ <h4 class="subheader"><%= @user.username %></h4>
19
+ </div>
20
+
21
+ <div class="large-4 columns">
22
+ <h3><%= t('users.email') %></h3>
23
+ <h4 class="subheader"><%= @user.email %></h4>
24
+ </div>
25
+ </div>
26
+
27
+ <hr/>
28
+
29
+ <div class="row">
30
+ <div class="large-12 columns">
31
+ <%= high_chart('api_requests', @api_requests) %>
32
+ </div>
33
+ </div>
@@ -0,0 +1,13 @@
1
+ Dear DigitalNZ developer,
2
+
3
+ The DigitalNZ account associated with this email address currently has a limit of <%= @limit %> DigitalNZ API calls per day. You exceeded this number API requests today. This might have happened because you have created an application that many people are using or because you have edited a large number of sets.
4
+
5
+ Your API key is unable to make further requests until tomorrow.
6
+
7
+ We encourage you to get in contact with us to discuss a higher daily rate. Drop us an email to develop@digitalnz.org and we'll get back to you as soon as we can.
8
+
9
+ For the DigitalNZ API Terms of Use see: http://www.digitalnz.org/about/terms-of-use/developer-api-terms-of-use
10
+ General DigitalNZ information for developers: http://www.digitalnz.org/developers
11
+
12
+ All the best,
13
+ DigitalNZ
@@ -0,0 +1 @@
1
+ The DigitalNZ account for <%= @email %> has exceeded it's daily limit of <%= @limit %>.
@@ -0,0 +1,13 @@
1
+ Dear DigitalNZ developer,
2
+
3
+ The DigitalNZ account associated with this email address currently has a limit of <%= @limit %> DigitalNZ API calls per day. So far today, you have used 90% of these API requests. This might have happened because you have created an application that many people are using or because you have edited a large number of sets.
4
+
5
+ If you exceed <%= @limit %> API calls today you will be unable to make anymore requests until tomorrow.
6
+
7
+ We encourage you to get in contact with us to discuss a higher daily rate. Drop us an email to develop@digitalnz.org and we'll get back to you as soon as we can.
8
+
9
+ For the DigitalNZ API Terms of Use see: http://www.digitalnz.org/about/terms-of-use/developer-api-terms-of-use
10
+ General DigitalNZ information for developers: http://www.digitalnz.org/developers
11
+
12
+ All the best,
13
+ DigitalNZ
@@ -0,0 +1 @@
1
+ The DigitalNZ account for <%= @email %> has used 90% of it's daily limit of <%= @limit %>.
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+ # The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ # and is licensed under the GNU General Public License, version 3.
4
+ # One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+ #
6
+ # Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ # the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+
9
+ module SupplejackApi
10
+ class DailyMetricsWorker
11
+ attr_reader :primary_key, :secondary_keys
12
+ @queue = :daily_metrics
13
+
14
+ def initialize
15
+ # configuration for metrics logging
16
+ # the primary_key is what the records get grouped on
17
+ # the secondary_keys are the fields counted, they must be multivalue fields
18
+ # if the secondary_keys are changed the FacetedMetrics model must be updated
19
+ # so that the field names match the new secondary_key names (the name must have '_counts' appended to it)
20
+ @primary_key = 'display_collection'
21
+ @secondary_keys = %w(
22
+ category
23
+ copyright
24
+ )
25
+ end
26
+
27
+ def self.perform
28
+ new.call
29
+ end
30
+
31
+ # Uses +SupplejackApi::RecordSearch+ to query the API for metrics information
32
+ # Metrics are grouped by the +@primary_key+ variable set in the constructor
33
+ # Metric information extracted from each record is determined by the +@secondary_keys+ variable
34
+ #
35
+ # The output of this worker is a +SupplejackApi::DailyItemMetric+ to represent metrics about the
36
+ # overall system and one +SupplejackApi::FacetedMetrics+ for each set of records grouped by the +@primary_key+
37
+ def call
38
+ facets = FacetsHelper.get_list_of_facet_values(primary_key)
39
+ partial_facets_data = facets.map(&method(:retrieve_facet_data))
40
+ full_facets_data = update_total_new_records(partial_facets_data)
41
+ create_metrics_records(full_facets_data)
42
+ create_daily_metrics
43
+ end
44
+
45
+ private
46
+
47
+ def retrieve_facet_data(facet)
48
+ s = RecordSearch.new(facets: secondary_keys.join(','), and: { primary_key.to_sym => facet })
49
+ facet_key_mappings = secondary_keys.reduce({}) { |a, e| a.merge(e.to_sym => custom_key_to_field_name(e)) }
50
+ facet_metadata = Hash[s.facets_hash.map { |k, v| [facet_key_mappings[k] || k, v] }]
51
+
52
+ {
53
+ name: facet,
54
+ date: Date.current,
55
+ total_active_records: s.total,
56
+ total_new_records: 0
57
+ }.merge(facet_metadata)
58
+ end
59
+
60
+ def update_total_new_records(facets)
61
+ facets = facets.dup
62
+ records = Record.active.created_on(Date.current)
63
+ counts_grouped_by_primary_key = records.group_by(&primary_key.to_sym).map { |k, v| [k, v.length] }
64
+
65
+ counts_grouped_by_primary_key.each do |primary_key, count|
66
+ facet_to_update = facets.find { |x| x[:name] == primary_key }
67
+
68
+ next unless facet_to_update.present?
69
+
70
+ facet_to_update[:total_new_records] = count
71
+ end
72
+
73
+ facets
74
+ end
75
+
76
+ def create_metrics_records(facets)
77
+ merge_block = lambda do |a, e|
78
+ a.merge(e) { |_, oldVal, newVal| oldVal + newVal }
79
+ end
80
+
81
+ active_records = Record.active
82
+ total_records = active_records.count
83
+ total_new_records = active_records.created_on(Date.current).count
84
+ total_copyright_counts = facets.map { |x| x[:copyright_counts] }.reduce({}, &merge_block)
85
+ total_category_counts = facets.map { |x| x[:category_counts] }.reduce({}, &merge_block)
86
+
87
+ FacetedMetrics.create(
88
+ name: 'all',
89
+ date: Time.zone.today,
90
+ total_active_records: total_records,
91
+ total_new_records: total_new_records,
92
+ copyright_counts: total_copyright_counts,
93
+ category_counts: total_category_counts
94
+ )
95
+
96
+ facets.each { |x| FacetedMetrics.create(x) }
97
+ end
98
+
99
+ def create_daily_metrics
100
+ public_user_sets_count = SupplejackApi::UserSet.publicly_viewable.excluding_favorites.count
101
+
102
+ DailyMetrics.create(
103
+ date: Date.current,
104
+ total_public_sets: public_user_sets_count
105
+ )
106
+ end
107
+
108
+ def custom_key_to_field_name(key)
109
+ "#{key}_counts".to_sym
110
+ end
111
+ end
112
+ end