Module: Gerrit2jiracomment
- Defined in:
- lib/gerrit2jiracomment.rb,
lib/gerrit2jiracomment/version.rb
Overview
Gerrit 2 jira sync module
Defined Under Namespace
Classes: LoggerWithTag, ProcessException, ToJira
Constant Summary collapse
- VERSION =
'0.2.6'
Class Method Summary collapse
- .connect(logger, subject, event_sink) ⇒ Object
- .dispatch(log, e, sink) ⇒ Object
- .init_logger ⇒ Object
- .load_settings(logger) ⇒ Object
- .parse_json(line) ⇒ Object
- .receive_events(logger, from, sink) ⇒ Object
- .regexp ⇒ Object
- .run ⇒ Object
- .stdout_in_utf8(command) ⇒ Object
- .syslog_or_stdout_logger ⇒ Object
- .tag_and_message(msg) ⇒ Object
- .to_jira(logger, settings) ⇒ Object
Instance Method Summary collapse
Class Method Details
.connect(logger, subject, event_sink) ⇒ Object
210 211 212 213 214 215 216 |
# File 'lib/gerrit2jiracomment.rb', line 210 def self.connect(logger, subject, event_sink) subject.as_observable.subscribe( ->(e) { dispatch(logger, e, event_sink) }, ->(_err) { logger.error(error) }, -> { logger.info('lifecycle†finished') } ) end |
.dispatch(log, e, sink) ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/gerrit2jiracomment.rb', line 152 def self.dispatch(log, e, sink) logger = LoggerWithTag.new(log, 'events') event = e.first server = e[1] return sink.send(event.type.tr('-', '_').to_sym, log, event, server) rescue NoMethodError => e logger.debug("Cannot handle event of type #{event.type} - #{e}") false rescue StandardError => error logger.error('Cannot process event', error) false end |
.init_logger ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/gerrit2jiracomment.rb', line 180 def self.init_logger logger = syslog_or_stdout_logger logger.formatter = proc do |severity, datetime, _progname, msg| tag, = (msg) format('%<year>04d-%<month>02d-%<day>02d %<hour>02d:%<min>02d:' \ "%<sec>02d.000 7331 %<severity>s %<tag>s: %<message>s\n", year: datetime.year, month: datetime.month, day: datetime.day, hour: datetime.hour, min: datetime.min, sec: datetime.sec, severity: severity[0], tag: tag, message: ) end logger end |
.load_settings(logger) ⇒ Object
193 194 195 196 |
# File 'lib/gerrit2jiracomment.rb', line 193 def self.load_settings(logger) logger.debug('lifecycle†loading settings from settings.yaml.gpg') YAML.safe_load(`gpg --decrypt settings.yaml.gpg 2> /dev/null`) end |
.parse_json(line) ⇒ Object
130 131 132 |
# File 'lib/gerrit2jiracomment.rb', line 130 def self.parse_json(line) JSON.parse(line, object_class: OpenStruct) end |
.receive_events(logger, from, sink) ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/gerrit2jiracomment.rb', line 140 def self.receive_events(logger, from, sink) Thread.new do logger.debug("lifecycle†Connecting to event stream of #{from}") stdout_in_utf8("ssh #{from} gerrit stream-events").each_line do |line| sink.on_next([JSON.parse(line, object_class: OpenStruct), from]) end logger.debug("lifecycle†Processing stream from #{from} finished") rescue StandardError => e logger.error(e.to_s) end end |
.regexp ⇒ Object
40 41 42 |
# File 'lib/gerrit2jiracomment.rb', line 40 def self.regexp Regexp.new('\\b*[A-Z0-9]+-\\d+\\b*') end |
.run ⇒ Object
223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/gerrit2jiracomment.rb', line 223 def self.run logger = init_logger settings = load_settings(logger) subject = Rx::Subject.new event_sink = to_jira(logger, settings) connect(logger, subject, event_sink) hosts .map { |server| receive_events(logger, server, subject) } .each(&:join) logger.info('lifecycle†exiting') end |
.stdout_in_utf8(command) ⇒ Object
134 135 136 137 138 |
# File 'lib/gerrit2jiracomment.rb', line 134 def self.stdout_in_utf8(command) _stdin, stdout, _stderr = Open3.popen3(command) stdout.set_encoding 'UTF-8:UTF-8' stdout end |
.syslog_or_stdout_logger ⇒ Object
165 166 167 168 169 |
# File 'lib/gerrit2jiracomment.rb', line 165 def self.syslog_or_stdout_logger Syslog::Logger.new 'g2jc' rescue StandardError Logger.new(STDOUT) end |
.tag_and_message(msg) ⇒ Object
171 172 173 174 175 176 177 178 |
# File 'lib/gerrit2jiracomment.rb', line 171 def self.(msg) tag, m = msg.split('†') unless m m = tag tag = 'gerrit2jiracomment' end [tag, m] end |
.to_jira(logger, settings) ⇒ Object
198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/gerrit2jiracomment.rb', line 198 def self.to_jira(logger, settings) ToJira.new(logger, JIRA::Client.new( username: settings['jira_user'], password: settings['jira_password'], site: 'https://esrlabs.atlassian.net/', context_path: '', auth_type: :basic, use_ssl: true, ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE )) end |
Instance Method Details
#hosts ⇒ Object
218 219 220 221 |
# File 'lib/gerrit2jiracomment.rb', line 218 def hosts ['gerrit.int.esrlabs.com', 'git.esrlabs.com', 'hcp5-sources.int.esrlabs.com'] end |