milemarker 1.0.0 → 1.0.1

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
  SHA256:
3
- metadata.gz: 1cc6c3aa16cc1d24991354663de1ceea5859d82a025e83d2683b9fa3b49d5f9e
4
- data.tar.gz: 924edbc92d18fd924d4934f188a88e9c36ed8bbbae443a7815462b4d40388fe0
3
+ metadata.gz: 7c802759bd48442b9a33c53d949c98786840cb78daa62b08eb9f2bc9ac4f6689
4
+ data.tar.gz: 37507e1e5d185967ab224df2bb79a7f8f45b0edf66a26a2acdee0c470dec146f
5
5
  SHA512:
6
- metadata.gz: 7841d99693517311d47206ca49890278386643130dd934b6ca6f93fa0b0032c5e6f8aaaf038f8c0336ff2e967744d0e86a86c7dcb9b34e8030cdcecaf97a5773
7
- data.tar.gz: 033d5566f4d893668c03f358f40a8ee2d0bd26610010e05ca11871225b94c2288f3bd252c1e9fc05f75034f200ba43d28520be5eba5d715e6f63766f8b19e765
6
+ metadata.gz: 046b4f34129f9ac46d99f03f44b174617f37ab468436d2f27dfece59c3ce190c23492037e60ac5285a17b05c774b18032bafb9f607e8c40e463a4f373a1fa619
7
+ data.tar.gz: 4b36594579c0e79d03d9b9d827f5dda74ccb118b2bfe8f1e294d8fd87d62c74233c3d78386bc3dc90a82346d04fb36fcb2d1d30905f6e5c58b569646ff779adb
@@ -0,0 +1,27 @@
1
+ name: Run Tests
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - main
8
+
9
+ env:
10
+ # See https://github.com/jruby/jruby/issues/5509
11
+ JAVA_OPTS: "--add-opens java.xml/com.sun.org.apache.xerces.internal.impl=org.jruby.dist"
12
+
13
+ jobs:
14
+ tests:
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ matrix:
18
+ ruby: [3.2, 3.3, 3.4, jruby]
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ - name: Set up Ruby
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: ${{ matrix.ruby }}
25
+ bundler-cache: true
26
+ - name: Run tests
27
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -9,3 +9,5 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
13
+ Gemfile.lock
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2021 Bill Dueber
3
+ Copyright (c) 2021 The Regents of the University of Michigan
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -27,12 +27,12 @@ class Milemarker
27
27
  when Hash
28
28
  msg
29
29
  when String
30
- { msg: msg }
30
+ {msg: msg}
31
31
  when Exception
32
32
  exception_message_hash(msg)
33
33
  else
34
34
  other_message_hash(msg)
35
- end.merge({ level: severity, time: datetime }).to_json
35
+ end.merge({level: severity, time: datetime}).to_json
36
36
  end
37
37
  self
38
38
  end
@@ -50,7 +50,7 @@ class Milemarker
50
50
  }
51
51
  end
52
52
 
53
- alias batch_data batch_line
53
+ alias_method :batch_data, :batch_line
54
54
 
55
55
  # @return [Hash] hash with information about the last batch
56
56
  def final_line
@@ -63,17 +63,17 @@ class Milemarker
63
63
  }
64
64
  end
65
65
 
66
- alias final_data final_line
66
+ alias_method :final_data, :final_line
67
67
 
68
68
  def exception_message_hash(msg)
69
- { msg: msg.message, error: msg.class, at: msg.backtrace&.first, hostname: Socket.gethostname }
69
+ {msg: msg.message, error: msg.class, at: msg.backtrace&.first, hostname: Socket.gethostname}
70
70
  end
71
71
 
72
72
  def other_message_hash(msg)
73
73
  if msg.respond_to? :to_h
74
74
  msg.to_h
75
75
  else
76
- { msg: msg.inspect }
76
+ {msg: msg.inspect}
77
77
  end
78
78
  end
79
79
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Milemarker
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.1"
5
5
  end
data/lib/milemarker.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "ppnum"
4
- require 'logger'
5
- require 'socket'
6
- require 'json'
7
- require 'milemarker/structured'
4
+ require "logger"
5
+ require "socket"
6
+ require "json"
7
+ require "milemarker/structured"
8
8
 
9
9
  # milemarker class, to keep track of progress over time for long-running
10
10
  # iterating processes
@@ -51,18 +51,18 @@ class Milemarker
51
51
  # @param [Logger, #info, #warn] Optional logger that responds to the normal #info, #warn, etc.
52
52
  def initialize(batch_size: 1000, name: nil, logger: nil)
53
53
  @batch_size = batch_size
54
- @name = name
55
- @logger = logger
54
+ @name = name
55
+ @logger = logger
56
56
 
57
57
  @batch_number = 0
58
- @last_batch_size = 0
58
+ @last_batch_size = 0
59
59
  @last_batch_seconds = 0
60
60
 
61
- @start_time = Time.now
61
+ @start_time = Time.now
62
62
  @batch_start_time = @start_time
63
- @batch_end_time = @start_time
63
+ @batch_end_time = @start_time
64
64
 
65
- @count = 0
65
+ @count = 0
66
66
  @prev_count = 0
67
67
  end
68
68
 
@@ -84,7 +84,7 @@ class Milemarker
84
84
  self
85
85
  end
86
86
 
87
- alias increment incr
87
+ alias_method :increment, :incr
88
88
 
89
89
  # Create a logger for use in logging milemaker information
90
90
  # @example mm.create_logger!(STDOUT)
@@ -108,7 +108,7 @@ class Milemarker
108
108
  incr.on_batch(&blk)
109
109
  end
110
110
 
111
- alias increment_and_on_batch _increment_and_on_batch
111
+ alias_method :increment_and_on_batch, :_increment_and_on_batch
112
112
 
113
113
  # Threadsafe version of #increment_and_on_batch, doing the whole thing as a single atomic action
114
114
  def threadsafe_increment_and_on_batch(&blk)
@@ -154,7 +154,7 @@ class Milemarker
154
154
  count - prev_count
155
155
  end
156
156
 
157
- alias batch_count_so_far final_batch_size
157
+ alias_method :batch_count_so_far, :final_batch_size
158
158
 
159
159
  # A line describing the entire run, suitable for logging, of the form
160
160
  # load records.ndj FINISHED. 27_138_118 total records in 00h 12m 39s. Overall 35_718 r/s.
@@ -208,8 +208,8 @@ class Milemarker
208
208
  # Set/reset all the internal state. Called by #on_batch when necessary;
209
209
  # should probably not be called manually
210
210
  def set_milemarker!
211
- @batch_end_time = Time.now
212
- @last_batch_size = @count - @prev_count
211
+ @batch_end_time = Time.now
212
+ @last_batch_size = @count - @prev_count
213
213
  @last_batch_seconds = @batch_end_time - @batch_start_time
214
214
 
215
215
  reset_for_next_batch!
@@ -218,8 +218,8 @@ class Milemarker
218
218
  # Reset the internal counters/timers at the end of a batch. Taken care of
219
219
  # by #on_batch; should probably not be called manually.
220
220
  def reset_for_next_batch!
221
- @batch_start_time = batch_end_time
222
- @prev_count = count
221
+ @batch_start_time = batch_end_time
222
+ @prev_count = count
223
223
  @batch_number = batch_divisor
224
224
  end
225
225
 
@@ -242,7 +242,7 @@ class Milemarker
242
242
 
243
243
  def seconds_to_time_string(sec)
244
244
  hours, leftover = sec.divmod(3600)
245
- minutes, secs = leftover.divmod(60)
245
+ minutes, secs = leftover.divmod(60)
246
246
  format("%02dh %02dm %02ds", hours, minutes, secs)
247
247
  end
248
248
  end
data/lib/ppnum.rb CHANGED
@@ -20,15 +20,15 @@
20
20
  def ppnum(num, width = 0, decimals = 0)
21
21
  num = num.round(decimals)
22
22
  dec_str = if decimals.zero?
23
- ""
24
- else
25
- ".#{format("%.#{decimals}f", num).split(".").last}"
26
- end
23
+ ""
24
+ else
25
+ ".#{format("%.#{decimals}f", num).split(".").last}"
26
+ end
27
27
  numstr = num.floor.to_s.reverse.split(/(...)/)
28
- .reject(&:empty?)
29
- .map(&:reverse)
30
- .reverse
31
- .join("_") + dec_str
28
+ .reject(&:empty?)
29
+ .map(&:reverse)
30
+ .reverse
31
+ .join("_") + dec_str
32
32
  if width.zero?
33
33
  numstr
34
34
  else
data/milemarker.gemspec CHANGED
@@ -3,27 +3,27 @@
3
3
  require_relative "lib/milemarker/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = "milemarker"
7
- spec.version = Milemarker::VERSION
8
- spec.authors = ["Bill Dueber"]
9
- spec.email = ["bill@dueber.com"]
10
-
11
- spec.summary = "Track and produce loglines for batch processing progress."
12
- spec.homepage = "https://github.com/billdueber/milemarker"
13
- spec.license = "MIT"
6
+ spec.name = "milemarker"
7
+ spec.version = Milemarker::VERSION
8
+ spec.authors = ["Bill Dueber"]
9
+ spec.email = ["bill@dueber.com"]
10
+
11
+ spec.summary = "Track and produce loglines for batch processing progress."
12
+ spec.homepage = "https://github.com/billdueber/milemarker"
13
+ spec.license = "MIT"
14
14
  spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
15
15
 
16
16
  spec.metadata["homepage_uri"] = spec.homepage
17
17
  spec.metadata["source_code_uri"] = spec.homepage
18
- spec.metadata["changelog_uri"] = spec.homepage + '/CHANGELOG.md'
18
+ spec.metadata["changelog_uri"] = spec.homepage + "/CHANGELOG.md"
19
19
 
20
20
  # Specify which files should be added to the gem when it is released.
21
21
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
22
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
23
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
24
24
  end
25
- spec.bindir = "exe"
26
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
29
  # Uncomment to register a new dependency of your gem
@@ -33,9 +33,9 @@ Gem::Specification.new do |spec|
33
33
  # guide at: https://bundler.io/guides/creating_gem.html
34
34
  #
35
35
 
36
- spec.add_development_dependency 'bundler', '~>2.0'
37
- spec.add_development_dependency 'pry'
38
- spec.add_development_dependency 'rake', '~>13.0'
39
- spec.add_development_dependency 'rspec', '~> 3.0'
40
- spec.add_development_dependency 'rubocop', '~> 1.7'
36
+ spec.add_development_dependency "bundler"
37
+ spec.add_development_dependency "pry"
38
+ spec.add_development_dependency "rake"
39
+ spec.add_development_dependency "rspec"
40
+ spec.add_development_dependency "standardrb"
41
41
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milemarker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bill Dueber
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-29 00:00:00.000000000 Z
11
+ date: 2025-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pry
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,52 +42,52 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '13.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '13.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rubocop
70
+ name: standardrb
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '1.7'
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '1.7'
83
- description:
82
+ version: '0'
83
+ description:
84
84
  email:
85
85
  - bill@dueber.com
86
86
  executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - ".github/workflows/main.yml"
90
+ - ".github/workflows/tests.yml"
91
91
  - ".gitignore"
92
92
  - ".rspec"
93
93
  - ".rubocop.yml"
@@ -110,7 +110,7 @@ metadata:
110
110
  homepage_uri: https://github.com/billdueber/milemarker
111
111
  source_code_uri: https://github.com/billdueber/milemarker
112
112
  changelog_uri: https://github.com/billdueber/milemarker/CHANGELOG.md
113
- post_install_message:
113
+ post_install_message:
114
114
  rdoc_options: []
115
115
  require_paths:
116
116
  - lib
@@ -125,8 +125,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  requirements: []
128
- rubygems_version: 3.2.32
129
- signing_key:
128
+ rubygems_version: 3.3.5
129
+ signing_key:
130
130
  specification_version: 4
131
131
  summary: Track and produce loglines for batch processing progress.
132
132
  test_files: []
@@ -1,16 +0,0 @@
1
- name: Ruby
2
-
3
- on: [push,pull_request]
4
-
5
- jobs:
6
- build:
7
- runs-on: ubuntu-latest
8
- steps:
9
- - uses: actions/checkout@v2
10
- - name: Set up Ruby
11
- uses: ruby/setup-ruby@v1
12
- with:
13
- ruby-version: 2.6.6
14
- bundler-cache: true
15
- - name: Run the default task
16
- run: bundle exec rake