#!/usr/bin/env perl
|
|
|
|
use warnings;
|
|
use strict;
|
|
use 5.10.0;
|
|
|
|
use utf8;
|
|
use open ':encoding(UTF-8)';
|
|
use open qw(:std :utf8);
|
|
|
|
use Time::Piece;
|
|
use Time::Seconds;
|
|
|
|
# We're simulating Unix timestamps here:
|
|
my $end = localtime->epoch;
|
|
my $start = $end - (3600);
|
|
|
|
say "Starting at: $start";
|
|
|
|
my @bars = qw(_ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █);
|
|
my $bin_count = 12;
|
|
|
|
my $range = $end - $start;
|
|
my $bin_width = $range / $bin_count;
|
|
|
|
my %bins;
|
|
for (0..($bin_count - 1)) {
|
|
my $bin_start = $start + ($_ * $bin_width);
|
|
$bins{$bin_start} = 0;
|
|
}
|
|
|
|
# Fake some events:
|
|
for (1..200) {
|
|
my $event = $start + int(rand($range));
|
|
for my $bin (keys %bins) {
|
|
if (($event > $bin) && ($event < ($bin + $bin_width))) {
|
|
$bins{$bin}++;
|
|
}
|
|
}
|
|
}
|
|
|
|
# Figure out what the tallest bin is, and map to a unit size.
|
|
my $biggest_bin = 0;
|
|
foreach my $bin_height (values %bins) {
|
|
if ($bin_height > $biggest_bin) {
|
|
$biggest_bin = $bin_height;
|
|
}
|
|
}
|
|
|
|
# Just some debugging - print bin starts and counts:
|
|
foreach my $bin (sort keys %bins) {
|
|
say $bin . " " . $bins{$bin};
|
|
}
|
|
|
|
# Display a bar for each bin:
|
|
foreach my $bin (sort keys %bins) {
|
|
my $bar_level = int(($bins{$bin} / $biggest_bin) * (scalar @bars));
|
|
my $bar = ' ';
|
|
if ($bar_level) {
|
|
$bar = $bars[$bar_level - 1];
|
|
}
|
|
print $bar;
|
|
}
|
|
|
|
print "\n";
|
|
say "Ending at: $end";
|