DBI.pm 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package Trog::Log::DBI;
  2. use strict;
  3. use warnings;
  4. use parent qw{Log::Dispatch::DBI};
  5. sub create_statement {
  6. my $self = shift;
  7. # This is a writable view. Consult schema for its behavior.
  8. my $sql = "INSERT INTO all_requests (uuid, date, ip_address, user, method, route, code) VALUES (?,?,?,?,?,?,?)";
  9. my $sql2 = "INSERT INTO messages (uuid, message) VALUES (?,?)";
  10. $self->{sth2} = $self->{dbh}->prepare($sql2);
  11. return $self->{dbh}->prepare($sql);
  12. }
  13. sub log_message {
  14. my ($self, %params) = @_;
  15. # Rip apart the message. If it's got any extended info, lets grab that too.
  16. my $msg = $params{message};
  17. my $message;
  18. my ($date, $uuid, $ip, $user, $method, $code, $route) = $msg =~ m!^([\w|\-|:]+) \[INFO\]: RequestId ([\w|\-]+) From ([\w|\.|:]+) \|(\w+)\| (\w+) (\d+) (.+)!;
  19. # Otherwise, let's mark it down in the "messages" table.
  20. if (!$date) {
  21. ($date, $uuid, $ip, $user, $message) = $msg =~ m!^([\w|\-|:]+) \[\w+\]: RequestId ([\w|\-]+) From ([\w|\.|:]+) \|(\w+)\| (.+)!;
  22. # Dummy up the method, code and route, as otherwise we summon complexity demon due to lack of FULL OUTER JOIN.
  23. $method = "UNKNOWN";
  24. $code = 100;
  25. $route = "bogus";
  26. }
  27. # If this is a mangled log, forget it.
  28. return unless $date;
  29. my $res = $self->{sth}->execute($uuid, $date, $ip, $user, $method, $route, $code);
  30. $self->{sth2}->execute($uuid, $message) if $message;
  31. return $res;
  32. }
  33. 1;