Class: SafeDb::KeyNow
- Inherits:
-
Object
- Object
- SafeDb::KeyNow
- Includes:
- Singleton
- Defined in:
- lib/keytools/key.now.rb
Overview
This stamp sits at the centre of a fundamental DevOps pattern concerned with infrastructure provisioning and configuraion management.
The central idea behind the pattern is to link every infrastructure object created during a session with a reference accurate to the nearest centi-second denoting the moment the software runtime (session) began.
Instance Attribute Summary collapse
-
#time_now ⇒ Object
readonly
Returns the value of attribute time_now.
Class Method Summary collapse
-
.ddd ⇒ Object
Return three character abbreviated day of week.
-
.fetch ⇒ String
Fetch the double barreled time stamp that is an amalgam of the human readable time now and a machine time representation from the moment this class was initialized.
-
.grab ⇒ String
Grab the double barreled time stamp that is an amalgam of the human readable time now and a machine time representation from the moment this class was initialized.
-
.hh ⇒ Object
Return two digit (character) hour of day from 00 to 23.
-
.hhmm ⇒ Object
Return the 4 digit amalgam of the hour and minute using the 24 hour clock.
-
.hhmm_sst ⇒ Object
Return the time of day to a TENTH of a second accuracy.
-
.human_readable ⇒ String
Fetch the human readable time stamp.
-
.jjj ⇒ Object
————————————————- – # Return 3 digit julian day of year [001] to [366].
-
.log_instance_time ⇒ Object
Log segments of time pertaining to the time stamp.
-
.mm ⇒ Object
Return two digit minute of hour from [00] to [59].
-
.mmm ⇒ Object
Return three character abbreviated month name.
-
.mo ⇒ Object
Return two digit [mo] month index from 01 to 12.
-
.previous_month_chars(this_month_index, this_4digit_year) ⇒ Object
Given two integer parameters (month index and 4 digit year) representing the month in question this method returns the [PREVIOUS MONTHS] character amalgam in the format [yymo_mmm] where.
-
.ss ⇒ Object
Return two digit second of minute from [00] to [59].
-
.sst ⇒ Object
Return a [3 digit] second and tenth of second representation.
-
.yy ⇒ Object
Return the [two] digit year (eg 19 for 2019).
-
.yyjjj ⇒ Object
Return 5 digit amalgam of year and julian day.
-
.yyjjj_hhmm_ss_nanosec ⇒ String
Return a string timestampt that is a period separated amalgam of the 2 digit year, 3 digit julian day, 2 digit hour, 2 digit minute, 2 digit second and 9 digit nanosecond.
-
.yyjjj_hhmm_sst ⇒ Object
Return a string timestampt that is a period separated amalgam of the 2 digit year, 3 digit julian day, 2 digit hour, 2 digit minute, 2 digit second and 1 digit rounded down tenth of second.
-
.yymo_mmm ⇒ Object
- yymo_mmm
-
returns an amalgam of.
-
.yymo_mmm_prev ⇒ Object
Using the current class time this method returns the character amalgam for the [PREVIOUS MONTH] in the format [yymo_mmm] where.
-
.yyyy ⇒ Object
Return the [four] digit year (eg 2019) that we are currently in.
-
.zone ⇒ Object
Return the Rubyfied time zone being used.
Instance Method Summary collapse
-
#initialize ⇒ KeyNow
constructor
This singleton (one instance) class sets the time just once.
Constructor Details
#initialize ⇒ KeyNow
This singleton (one instance) class sets the time just once.
400 401 402 |
# File 'lib/keytools/key.now.rb', line 400 def initialize @time_now = Time.now; end |
Instance Attribute Details
#time_now ⇒ Object (readonly)
Returns the value of attribute time_now.
16 17 18 |
# File 'lib/keytools/key.now.rb', line 16 def time_now @time_now end |
Class Method Details
.ddd ⇒ Object
Return three character abbreviated day of week.
38 39 40 |
# File 'lib/keytools/key.now.rb', line 38 def self.ddd return KeyNow.instance.time_now.strftime( "%a" ).downcase end |
.fetch ⇒ String
Fetch the double barreled time stamp that is an amalgam of the human readable time now and a machine time representation from the moment this class was initialized.
See the yyjjj_hhmm_ss_nanosec method for documentation of the nanosecond accurate time stamp.
339 340 341 |
# File 'lib/keytools/key.now.rb', line 339 def self.fetch return "#{Time.now.ctime} ( #{yyjjj_hhmm_ss_nanosec} )" end |
.grab ⇒ String
Grab the double barreled time stamp that is an amalgam of the human readable time now and a machine time representation from the moment this class was initialized.
On Friday June the 8th at about 6:26 pm.
Fri Jun 8 18:26:17 2018 ( 18159.1826.138 )
See the yyjjj_hhmm_sst method for documentation of stamp that is accurate to the tenth of a second.
358 359 360 361 362 |
# File 'lib/keytools/key.now.rb', line 358 def self.grab time_with_consecutive_spaces = Time.now.ctime human_readable_str = time_with_consecutive_spaces.gsub( " ", " " ) return "#{human_readable_str} ( #{yyjjj_hhmm_sst} )" end |
.hh ⇒ Object
Return two digit (character) hour of day from 00 to 23.
47 48 49 |
# File 'lib/keytools/key.now.rb', line 47 def self.hh return KeyNow.instance.time_now.strftime "%H" end |
.hhmm ⇒ Object
Return the 4 digit amalgam of the hour and minute using the 24 hour clock.
224 225 226 |
# File 'lib/keytools/key.now.rb', line 224 def self.hhmm return "#{hh}#{mm}" end |
.hhmm_sst ⇒ Object
Return the time of day to a TENTH of a second accuracy.
- 8
-
characters will always be returned with the 5th one
being the (period) separator.
The first (separated) segment delivers a hhmm 24 hour clock representation of the stamped time.
The 3 digits of the second segment comprise of
second of minute => 2 digits | [00] to [59]
tenth of second => 1 digit from [0] to [9]
250 251 252 |
# File 'lib/keytools/key.now.rb', line 250 def self.hhmm_sst return "#{hhmm}.#{sst}" end |
.human_readable ⇒ String
Fetch the human readable time stamp.
323 324 325 |
# File 'lib/keytools/key.now.rb', line 323 def self.human_readable return "#{Time.now.ctime} #{yyjjj_hhmm_sst}" end |
.jjj ⇒ Object
————————————————- – # Return 3 digit julian day of year [001] to [366]. – # ————————————————- – #
122 123 124 |
# File 'lib/keytools/key.now.rb', line 122 def self.jjj return KeyNow.instance.time_now.strftime "%j" end |
.log_instance_time ⇒ Object
move method contents into test class
Log segments of time pertaining to the time stamp.
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 |
# File 'lib/keytools/key.now.rb', line 374 def self.log_instance_time log.info(x) { "[stamp] -------------- => -------------------------------- #" } log.info(x) { "[stamp] eco time stamp => [#{KeyNow.instance.time_now.ctime}]" } log.info(x) { "[stamp] -------------- => -------------------------------- #" } log.info(x) { "[stamp] Univ Time Zone => #{zone}" } log.info(x) { "[stamp] Month Index is => #{mo}" } log.info(x) { "[stamp] Month Name is => #{mmm}" } log.info(x) { "[stamp] Day Of Week is => #{ddd}" } log.info(x) { "[stamp] -------------- => -------------------------------- #" } log.info(x) { "[stamp] Two Digit Year => #{yy}" } log.info(x) { "[stamp] Julian Cal Day => #{jjj}" } log.info(x) { "[stamp] Yr and Jul Day => #{yyjjj}" } log.info(x) { "[stamp] Hour of Theday => #{hh}" } log.info(x) { "[stamp] Minute of Hour => #{mm}" } log.info(x) { "[stamp] Hour + Minute => #{hhmm}" } log.info(x) { "[stamp] Second of Min => #{ss}" } log.info(x) { "[stamp] 600 Min Slices => #{sst}" } log.info(x) { "[stamp] -------------- => -------------------------------- #" } log.info(x) { "[stamp] The Time Stamp => #{yyjjj_hhmm_sst}" } log.info(x) { "[stamp] -------------- => -------------------------------- #" } end |
.mm ⇒ Object
Return two digit minute of hour from [00] to [59].
55 56 57 |
# File 'lib/keytools/key.now.rb', line 55 def self.mm return KeyNow.instance.time_now.strftime "%M" end |
.mmm ⇒ Object
Return three character abbreviated month name.
29 30 31 |
# File 'lib/keytools/key.now.rb', line 29 def self.mmm return KeyNow.instance.time_now.strftime( "%b" ).downcase end |
.mo ⇒ Object
Return two digit [mo] month index from 01 to 12.
21 22 23 |
# File 'lib/keytools/key.now.rb', line 21 def self.mo return KeyNow.instance.time_now.strftime "%m" end |
.previous_month_chars(this_month_index, this_4digit_year) ⇒ Object
Given two integer parameters (month index and 4 digit year) representing the month in question this method returns the [PREVIOUS MONTHS] character amalgam in the format [yymo_mmm] where
=> yy | previous month's two-digit year
=> mo | previous month's two-digit month index
=> . | a period (separator)
=> mmm | previous month's abbreviated month name
Example 1 (Simple)
returns char => 1907.jul
4 parameters => 8, 2019
representing => August, 2019
Example 2 (Last Year)
returns char => 1812.dec
4 parameters => 1, 2019
representing => January, 2019
169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/keytools/key.now.rb', line 169 def self.previous_month_chars this_month_index, this_4digit_year prev_month_index = this_month_index == 1 ? 12 : ( this_month_index - 1 ) prev_2dig_mn_pad = sprintf '%02d', prev_month_index prev_4digit_year = this_month_index == 1 ? ( this_4digit_year - 1 ) : this_4digit_year prev_twodigit_yr = "#{prev_4digit_year.to_s}"[2..-1] prev_months_name = Date::ABBR_MONTHNAMES[prev_month_index].downcase return "#{prev_twodigit_yr}#{prev_2dig_mn_pad}.#{prev_months_name}" end |
.ss ⇒ Object
Return two digit second of minute from [00] to [59].
63 64 65 |
# File 'lib/keytools/key.now.rb', line 63 def self.ss return KeyNow.instance.time_now.strftime "%S" end |
.sst ⇒ Object
Return a [3 digit] second and tenth of second representation.
The final digit is derived from the 1000 sliced millisecond of second running from 000 to 999.
Truncation (Not Rounding)
The [final] digit is acquired by TRUNCATING (chopping off) the last 2 of the 3 millisecond digits. No rounding is applied.
The 3 returned digits comprise of the
-
second of minute => 2 digits | [00] to [59] (and)
-
tenth of second => 1 digit from [0] to [9]
95 96 97 98 |
# File 'lib/keytools/key.now.rb', line 95 def self.sst millisec_string = KeyNow.instance.time_now.strftime "%L" return "#{ss}#{millisec_string[0]}" end |
.yy ⇒ Object
Return the [two] digit year (eg 19 for 2019). that we are currently in.
105 106 107 |
# File 'lib/keytools/key.now.rb', line 105 def self.yy return KeyNow.instance.time_now.strftime("%Y")[2..-1] end |
.yyjjj ⇒ Object
Return 5 digit amalgam of year and julian day.
eg [19003] for [January 3rd 2019]
212 213 214 |
# File 'lib/keytools/key.now.rb', line 212 def self.yyjjj return "#{yy}#{jjj}" end |
.yyjjj_hhmm_ss_nanosec ⇒ String
Return a string timestampt that is a period separated amalgam of the 2 digit year, 3 digit julian day, 2 digit hour, 2 digit minute, 2 digit second and 9 digit nanosecond.
As per the above example, the time returned
-
is the 836592034 nanosecond
-
of the 42nd second
-
of the 25th minute
-
of the 17th hour
-
of the 3rd day
-
of the 20th year
-
of the 21st century
313 314 315 316 |
# File 'lib/keytools/key.now.rb', line 313 def self.yyjjj_hhmm_ss_nanosec nanosec_str = KeyNow.instance.time_now.strftime "%9N" return "#{yyjjj}.#{hhmm}.#{ss}.#{nanosec_str}" end |
.yyjjj_hhmm_sst ⇒ Object
Return a string timestampt that is a period separated amalgam of the 2 digit year, 3 digit julian day, 2 digit hour, 2 digit minute, 2 digit second and 1 digit rounded down tenth of second.
Return the time of day to a TENTH of a second accuracy.
- 8
-
characters will always be returned with the 5th one
being the (period) separator.
The first (separated) segment delivers a hhmm 24 hour clock representation of the stamped time.
The 3 digits of the second segment comprise of
-
second of minute => 2 digits | [00] to [59]
-
tenth of second => 1 digit from [0] to [9]
285 286 287 |
# File 'lib/keytools/key.now.rb', line 285 def self.yyjjj_hhmm_sst return "#{yyjjj}.#{hhmm}.#{sst}" end |
.yymo_mmm ⇒ Object
- yymo_mmm
-
returns an amalgam of
=> the two-digit year
=> the two-digit month index (starting at 01)
=> a period (separator)
=> the abbreviated month name
138 139 140 |
# File 'lib/keytools/key.now.rb', line 138 def self.yymo_mmm return "#{yy}#{mo}.#{mmm}" end |
.yymo_mmm_prev ⇒ Object
Using the current class time this method returns the character amalgam for the [PREVIOUS MONTH] in the format [yymo_mmm] where
=> yy | last month's two-digit year
=> mo | last month's two-digit month index
=> . | a period (separator)
=> mmm | last month's abbreviated month name
Example 1 (Simple)
returns => 1907.jul
if this month is => August 2019
Example 2 (Last Year)
returns => 1812.dec
if this month is => January 2019
205 206 207 |
# File 'lib/keytools/key.now.rb', line 205 def self.yymo_mmm_prev return previous_month_chars mo.to_i, yyyy.to_i end |
.yyyy ⇒ Object
Return the [four] digit year (eg 2019) that we are currently in.
114 115 116 |
# File 'lib/keytools/key.now.rb', line 114 def self.yyyy return KeyNow.instance.time_now.strftime("%Y") end |
.zone ⇒ Object
Return the Rubyfied time zone being used.
366 367 368 |
# File 'lib/keytools/key.now.rb', line 366 def self.zone return KeyNow.instance.time_now.zone end |