debug.pl 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. # Local modules
  5. use POSIX;
  6. use Cwd qw(abs_path);
  7. use File::Basename qw(dirname);
  8. use lib dirname(abs_path($0));
  9. use DMX;
  10. # User config
  11. my %DIM = ();
  12. my $DELAY = 10;
  13. # App config
  14. my $STATE_SOCK = 'DEBUG';
  15. # Allow one-shot mode or force debug
  16. my $KEY = undef();
  17. if (scalar(@ARGV) > 0) {
  18. $KEY = $ARGV[0];
  19. } else {
  20. DMX::debug(1);
  21. }
  22. # Sockets
  23. DMX::stateSocket($STATE_SOCK);
  24. DMX::stateSubscribe($STATE_SOCK);
  25. # Loop forever
  26. my %exists = ();
  27. my %mtime = ();
  28. while (1) {
  29. my $state = DMX::readState($DELAY, \%exists, \%mtime, undef());
  30. if ($state) {
  31. # One-shot mode
  32. if (defined($KEY)) {
  33. if (exists($exists{$KEY})) {
  34. print $KEY . ' => ' . $exists{$KEY} . ' @ ' .
  35. POSIX::strftime('%Y-%m-%d %H:%M:%S', localtime($mtime{$KEY})) . "\n";
  36. } else {
  37. print STDERR 'No such element: ' . $KEY . "\n";
  38. }
  39. exit 0;
  40. }
  41. # Find the latest modification timestamp
  42. my $file = undef();
  43. foreach my $key (keys(%mtime)) {
  44. if (!defined($file) || $mtime{$key} > $mtime{$file}) {
  45. $file = $key;
  46. }
  47. }
  48. # Pretty print
  49. my $time = 0;
  50. if (defined($file)) {
  51. $time = $mtime{$file};
  52. } else {
  53. $file = '<NO MTIME DATA>';
  54. }
  55. print STDERR "\tLast update: " . $file . ': ' . localtime($time) . "\n";
  56. }
  57. }