maltese 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b25d7aed1fa4b41a642a8bf8449e067c67fa28861cf319c54d24b4ffccbcd6d
4
- data.tar.gz: af043d259c92a902d5a42c281a0746fc2cf65f356ebb2bec161cc707f89f9b3a
3
+ metadata.gz: fe93930c90b5ddc8d0b3b89de7e18b7644356b64f82c76451b16cf9395e94269
4
+ data.tar.gz: 208578435824ca3f9a9cf2582e1dd73f6df8e018319494469c2a1f2408d9a3ed
5
5
  SHA512:
6
- metadata.gz: e1399ede091a478151153b5071b7881ae1bedd9068ac017ab34c1cfcf1931559a607f0f2ccba83b1018b3a251898e4498d8557267905478c7dd48e322b288722
7
- data.tar.gz: 50cd6f3a1ee8a4b0c508805720efcc58db31208dd7842668b6785cf0684bd03059d2872113e002d4c89c5e501fb2924f6323ff24caa3db5227c86517fbbef7c3
6
+ metadata.gz: 6dbeb4a4e96a050c987746be6a414dfe53428ed7b30ad211dee2a11df7052ce995f1f07841ce0cc32c1cd9d8904b4197c049b9ba3da7614659fc75adfa55f313
7
+ data.tar.gz: 8dea3a1fb90e4d9cd94cfa85bb2b4e1263b0635ad3010c937d311ab4519da49c8759a8679edf1313305f67843428be780b9db991ae06ac97e8c4878d4ae5f74b
data/Dockerfile CHANGED
@@ -11,6 +11,6 @@ RUN apt-get update && apt-get upgrade -y -o Dpkg::Options::="--force-confold" &&
11
11
  apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
12
12
 
13
13
  # Install maltese gem
14
- RUN /sbin/setuser app gem install maltese -v 0.9.2
14
+ RUN /sbin/setuser app gem install maltese -v 0.9.3
15
15
 
16
- CMD maltese sitemap --sitemap_bucket $SITEMAP_BUCKET --rack_env $RACK_ENV --access_key $AWS_ACCESS_KEY_ID --secret_key $AWS_SECRET_ACCESS_KEY --region $AWS_REGION
16
+ CMD maltese sitemap --sitemap_bucket $SITEMAP_BUCKET --rack_env $RACK_ENV --access_key $AWS_ACCESS_KEY_ID --secret_key $AWS_SECRET_ACCESS_KEY --region $AWS_REGION --slack_webhook_url $SLACK_WEBHOOK_URL
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- maltese (0.9.2)
4
+ maltese (0.9.3)
5
5
  activesupport (>= 4.2.5, < 6)
6
6
  aws-sdk-s3 (~> 1.19)
7
7
  dotenv (~> 2.1, >= 2.1.1)
@@ -11,6 +11,7 @@ PATH
11
11
  mime-types (~> 3.1)
12
12
  retriable (~> 3.1)
13
13
  sitemap_generator (~> 6.0)
14
+ slack-notifier (~> 2.1)
14
15
  thor (~> 0.19)
15
16
 
16
17
  GEM
@@ -59,7 +60,7 @@ GEM
59
60
  i18n (1.7.0)
60
61
  concurrent-ruby (~> 1.0)
61
62
  jmespath (1.4.0)
62
- json (2.2.0)
63
+ json (2.3.0)
63
64
  logstash-event (1.2.02)
64
65
  logstash-logger (0.26.1)
65
66
  logstash-event (~> 1.2)
@@ -111,6 +112,7 @@ GEM
111
112
  simplecov-html (0.10.2)
112
113
  sitemap_generator (6.0.2)
113
114
  builder (~> 3.0)
115
+ slack-notifier (2.3.2)
114
116
  thor (0.20.3)
115
117
  thread_safe (0.3.6)
116
118
  tzinfo (1.2.5)
data/lib/maltese/cli.rb CHANGED
@@ -23,6 +23,7 @@ module Maltese
23
23
  method_option :access_key, type: :string
24
24
  method_option :secret_key, type: :string
25
25
  method_option :region, type: :string
26
+ method_option :slack_webhook_url, type: :string
26
27
  def sitemap
27
28
  sitemap = Maltese::Sitemap.new(options)
28
29
  sitemap.queue_jobs
@@ -1,11 +1,12 @@
1
1
  require 'logstash-logger'
2
2
  require 'retriable'
3
+ require 'slack-notifier'
3
4
 
4
5
  module Maltese
5
6
  class ::BadGatewayError < StandardError; end
6
7
 
7
8
  class Sitemap
8
- attr_reader :sitemap_bucket, :rack_env, :access_key, :secret_key, :region, :logger
9
+ attr_reader :sitemap_bucket, :rack_env, :access_key, :secret_key, :region, :slack_webhook_url, :logger
9
10
 
10
11
  # load ENV variables from .env file if it exists
11
12
  env_file = File.expand_path("../../../.env", __FILE__)
@@ -22,12 +23,16 @@ module Maltese
22
23
  env_vars.each { |k, v| ENV[k] = v }
23
24
  end
24
25
 
26
+ # icon for Slack messages
27
+ SLACK_ICON_URL = "https://github.com/datacite/segugio/blob/master/source/images/fabrica.png"
28
+
25
29
  def initialize(attributes={})
26
30
  @sitemap_bucket = attributes[:sitemap_bucket].presence || "search.test.datacite.org"
27
31
  @rack_env = attributes[:rack_env].presence || ENV['RACK_ENV'] || "stage"
28
32
  @access_key = attributes[:access_key].presence || ENV['AWS_ACCESS_KEY_ID']
29
33
  @secret_key = attributes[:secret_key].presence || ENV['AWS_SECRET_ACCESS_KEY']
30
34
  @region = attributes[:region].presence || ENV['AWS_REGION']
35
+ @slack_webhook_url = attributes[:slack_webhook_url].presence || ENV['SLACK_WEBHOOK_URL']
31
36
 
32
37
  @logger = LogStashLogger.new(type: :stdout)
33
38
  end
@@ -36,6 +41,10 @@ module Maltese
36
41
  rack_env == "production" ? "https://search.datacite.org/" : "https://search.test.datacite.org/"
37
42
  end
38
43
 
44
+ def slack_title
45
+ rack_env == "production" ? "DataCite Fabrica" : "DataCite Fabrica Test"
46
+ end
47
+
39
48
  def sitemaps_path
40
49
  "sitemaps/"
41
50
  end
@@ -130,8 +139,13 @@ module Maltese
130
139
  options[:url] = nil
131
140
  end
132
141
  rescue => exception
133
- logger.error "Error: #{exception.message}."
142
+ logger.error "Error: #{exception.message}"
134
143
  error_count += 1
144
+ fields = [
145
+ { title: "Error", value: exception.message },
146
+ { title: "Time Taken", value: "#{((Time.now - options[:start_time])/ 60.0).ceil} min", short: true }
147
+ ]
148
+ send_notification_to_slack(nil, title: slack_title + ": Sitemaps Not Updated", level: "danger", fields: fields) unless rack_env == "test"
135
149
  options[:url] = nil
136
150
  ensure
137
151
  # don't loop when testing
@@ -151,7 +165,7 @@ module Maltese
151
165
  def parse_data(result)
152
166
  Array.wrap(result.body.fetch("data", nil)).each do |item|
153
167
  loc = "/works/" + item.dig("attributes", "doi")
154
- sitemap.add loc, changefreq: "monthly", lastmod: item.dig("attributes", "updated")
168
+ sitemap.add loc, changefreq: "weekly", lastmod: item.dig("attributes", "updated")
155
169
  end
156
170
  sitemap.sitemap.link_count
157
171
  end
@@ -160,7 +174,36 @@ module Maltese
160
174
  sitemap.finalize!
161
175
  options[:start_time] ||= Time.now
162
176
  sitemap.sitemap_index.stats_summary(:time_taken => Time.now - options[:start_time])
177
+
178
+ fields = [
179
+ { title: "URL", value: "#{sitemap_url}sitemaps/sitemap.xml.gz" },
180
+ { title: "Number of DOIs", value: format_number(sitemap.sitemap.link_count), short: true },
181
+ { title: "Time Taken", value: "#{((Time.now - options[:start_time])/ 60.0).ceil} min", short: true }
182
+ ]
183
+ send_notification_to_slack(nil, title: slack_title + ": Sitemaps Updated", level: "good", fields: fields) unless rack_env == "test"
163
184
  sitemap.sitemap.link_count
164
185
  end
186
+
187
+ def send_notification_to_slack(text, options={})
188
+ return nil unless slack_webhook_url.present?
189
+
190
+ attachment = {
191
+ title: options[:title] || "Fabrica Message",
192
+ text: text,
193
+ color: options[:level] || "good",
194
+ fields: options[:fields]
195
+ }.compact
196
+
197
+ notifier = Slack::Notifier.new slack_webhook_url,
198
+ username: "Fabrica",
199
+ icon_url: SLACK_ICON_URL
200
+ response = notifier.ping attachments: [attachment]
201
+ response.first.body
202
+ end
203
+
204
+ # from https://codereview.stackexchange.com/questions/28054/separate-numbers-with-commas
205
+ def format_number(number)
206
+ number.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
207
+ end
165
208
  end
166
209
  end
@@ -1,3 +1,3 @@
1
1
  module Maltese
2
- VERSION = "0.9.2"
2
+ VERSION = "0.9.3"
3
3
  end
data/maltese.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.add_dependency 'logstash-logger', '~> 0.26.1'
21
21
  s.add_dependency 'activesupport', '>= 4.2.5', '< 6'
22
22
  s.add_dependency 'dotenv', '~> 2.1', '>= 2.1.1'
23
+ s.add_dependency 'slack-notifier', '~> 2.1'
23
24
  s.add_dependency 'thor', '~> 0.19'
24
25
  s.add_dependency 'retriable', '~> 3.1'
25
26
  s.add_dependency 'sitemap_generator', '~> 6.0'
data/spec/cli_spec.rb CHANGED
@@ -16,7 +16,7 @@ describe Maltese::CLI do
16
16
  sitemap = Zlib::GzipReader.open("public/sitemaps/sitemap.xml.gz") { |gz| gz.read }
17
17
  doc = Nokogiri::XML(sitemap)
18
18
  expect(doc.xpath("//xmlns:url").size).to eq(1001)
19
- expect(doc.xpath("//xmlns:loc").last.text).to eq("https://search.test.datacite.org/works/10.1007/s10620-013-2631-z")
19
+ expect(doc.xpath("//xmlns:loc").last.text).to eq("https://search.test.datacite.org/works/10.1080/19393210.2019.1576774")
20
20
  end
21
21
  end
22
22
  end