• Stars
    star
    144
  • Rank 255,590 (Top 6 %)
  • Language
    Ruby
  • License
    ISC License
  • Created about 16 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

a fast, high resolution timer library for recording performance metrics

Hitimes

Build Status

Description

A fast, high resolution timer library for recording peformance metrics.

  • Homepage
  • Github project
  • email jeremy at copiousfreetime dot org
  • git clone url git://github.com/copiousfreetime/hitimes.git

Table of Contents

Requirements

Hitimes requires the following to run:

  • Ruby

Usage

Hitimes easiest to use when installed with rubygems:

gem install hitimes

Or as part of your bundler Gemfile:

gem 'hitimes'

You can load it with the standard ruby require statement.

require 'hitimes'

Interval

Use Hitimes::Interval to calculate only the duration of a block of code. Returns the time as seconds.

duration = Hitimes::Interval.measure do
             1_000_000.times do |x|
               2 + 2
             end
           end

puts duration  # => 0.047414297 (seconds)

TimedMetric

Use a Hitimes::TimedMetric to calculate statistics about an iterative operation

timed_metric = Hitimes::TimedMetric.new('operation on items')

Explicitly use start and stop:

collection.each do |item|
  timed_metric.start
  # .. do something with item
  timed_metric.stop
end

Or use the block. In TimedMetric the return value of measure is the return value of the block.

collection.each do |item|
  result_of_do_something = timed_metric.measure { do_something( item ) }
end

And then look at the stats

puts timed_metric.mean
puts timed_metric.max
puts timed_metric.min
puts timed_metric.stddev
puts timed_metric.rate

ValueMetric

Use a Hitimes::ValueMetric to calculate statistics about measured samples.

value_metric = Hitimes::ValueMetric.new( 'size of thing' )
loop do
  # ... do stuff changing sizes of 'thing'
  value_metric.measure( thing.size )
  # ... do other stuff that may change size of thing
end

puts value_metric.mean
puts value_metric.max
puts value_metric.min
puts value_metric.stddev
puts value_metric.rate

TimedValueMetric

Use a Hitimes::TimedValueMetric to calculate statistics about batches of samples.

timed_value_metric = Hitimes::TimedValueMetric.new( 'batch times' )
loop do 
  batch = ... # get a batch of things
  timed_value_metric.start
  # .. do something with batch
  timed_value_metric.stop( batch.size )
end

puts timed_value_metric.rate

puts timed_value_metric.timed_stats.mean
puts timed_value_metric.timed_stats.max
puts timed_value_metric.timed_stats.min
puts timed_value_metric.timed_stats.stddev

puts timed_value_metric.value_stats.mean
puts timed_value_metric.value_stats.max
puts timed_value_metric.value_stats.min
puts timed_value_metric.value_stats.stddev

Implementation details

Hitimes uses the internal ruby Process::clock_gettime() to get the highest granularity time increment possible. Generally this is nanosecond resolution, or whatever the hardware in the CPU supports.

Support

Hitimes is supported on whatever versions of ruby are currently supported. Hitimes also follows semantic versioning.

The current officially supported versions of Ruby are:

  • MRI Ruby (all platforms) 2.3 - 2.6
  • JRuby 9.1.17.0, 9.2.X.X

Unofficially supported versions, any version of MRI from Ruby 2.1 and up. Sincd the C Extension has been removed Hitimes should work with any ruby that is 2.1 or greater as that is when Process.clock_gettime() was implemented.

For versions of Ruby before 2.1 please use Hitimes 1.3, the extension code is still in there and they should still work.

Contributing

Please read the CONTRIBUTING.md

Credits

License

Hitimes is licensed under the ISC license.

Copyright (c) 2008-2016 Jeremy Hinegardner

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

More Repositories

1

launchy

A helper for launching cross-platform applications in a fire and forget manner.
Ruby
775
star
2

stickler

a tool to organize and maintain an internal gem distribution server
Ruby
143
star
3

amalgalite

SQLite database engine embedded in a ruby extension.
C
95
star
4

crate

(No longer in development) Tool for building and packaging standalone statically compiled ruby appliations
Ruby
92
star
5

heel

Heel is a small static web server for use when you need a quick web server for a directory.
Ruby
68
star
6

tyrantmanager

ARCHIVED - A command line tool for managing Tokyo Tyrant instances
Ruby
34
star
7

qup

Qup is a generalized Ruby API for Message Queue and Publish/Subscribe messaging patterns.
Ruby
31
star
8

torid

Temporally Ordered IDs. Generate universally unique identifiers (UUID) that sort lexically in time order.
Ruby
27
star
9

mp4parser

This is an old fork of the pre-github-migration mp4parser from google code. You really should be looking at https://github.com/sannies/mp4parser instead.
Java
22
star
10

http-parser.rb

A ruby gem that embedds ry/http-parser in it as an extension
C
15
star
11

keybox

secure password storage
Ruby
13
star
12

deprecatable

Deprecatable is a library to help you, as a developer, deprecate your API and be proactive about helping people who use your library find where they need to update.
Ruby
13
star
13

htauth

HTAuth is a pure ruby replacement for the Apache support programs 'htdigest' and 'htpasswd'
Ruby
11
star
14

ashbe

Asbhe is a Ruby wrapper around the HBase java client library. It aims to make accessing HBase a more Ruby-esque experience.
Ruby
11
star
15

tokyo-tools

Ad-hoc tools for working with tokyo cabinet databases
C
10
star
16

kjess

(inactive since kestrel itself is now inactive) KJess is a Ruby Kestrel client implementing Kestrel's Memcache style protocol
Ruby
9
star
17

libsql-ruby

libsql database engine embedded in a ruby extension.
C
8
star
18

halog

A log parser and reporter for haproxy logs
Ruby
7
star
19

stunnel

stunnel with x-forwarded-for patch and x-ssl-protocol patch
C
7
star
20

gemology

Excavating Ruby's gems, what do we find, what do we learn.
Ruby
6
star
21

bridgetown_reveal

A reveal.js plugin for the bridgetown static site generator
Ruby
6
star
22

rabal

Ruby Architecture for Building Applications and Libraries
Ruby
5
star
23

activerecord-amalgalite-adapter

The ActiveRecord Adapter for the Amalgalite database
Ruby
4
star
24

ghent

GitHub EveNT - for lack of a better acronym. An experiment in processing GitHub Events.
Ruby
3
star
25

ruby-libtommath

[Archived] a ruby extension containing the libtommath multiple-precision integer library
C
3
star
26

snipe

A system for scraping twitter content based upon the gnip notification feed
Ruby
3
star
27

plain-old-tokyo-storage-presentation

Plain Old Tokyo Storage talk given at Red Dirt Ruby Conference - 2010
3
star
28

readorder

Readorder orders a list of files into a more effective read order.
Ruby
3
star
29

fixme

A Starting Point.
Ruby
2
star
30

flat_kit

A library and commandline program for reading, writing, indexing, sorting, and merging CSV, TSV, JSON and other flat-file formats.
Ruby
2
star
31

libsimple_metrics

A very simple C library for capturing metrics
2
star
32

billys_billing

Ruby client for the v2 version of Billy's Billing
Ruby
1
star
33

thin_search

The thinnest full text search you'll find.
Ruby
1
star
34

docker-base-alpine-s6-overlay

A minimal alpine linux docker container using s6-overlay based upon alpine packages
Dockerfile
1
star
35

libsql-client-ruby

LibsqlClient is the Ruby library to the libSQL sqld server (including Turso).
Ruby
1
star
36

tbar

Playing with Accounting
Ruby
1
star