#! /usr/bin/perl

use DateTime;
use DateTime::Format::ISO8601;
use DateTime::Format::Strptime;
use IO::Socket;

sub isotime {
    my $tz = DateTime::TimeZone->new(name=>'local');
    my $time = DateTime->now;
    
    $time->set_time_zone($tz);
    $isotime = $time->strftime('%Y-%m-%dT%H:%M:%S.0000000');

    $tz = $tz->offset_for_datetime($time);
    if ($tz>0) {
	$tzh = $tz / 3600;
	$tzm = ($tz - $tzh*3600)/60;
	if ($tzh<10) { $tzh = "0" . $tzh; }
	if ($tzm<10) { $tzm = "0" . $tzm; }
	$isotime .= "+" . $tzh . ":" . $tzm;
    } elsif ($tz<0) {
	$tzh = abs($tz) / 3600;
	$tzm = (abs($tz) - $tzh*3600)/60;
	if ($tzh<10) { $tzh = "0" . $tzh; }
	if ($tzm<10) { $tzm = "0" . $tzm; }
	$isotime .= "-" . $tzh . ":" . $tzm;
    } else {
	$isotime .= "Z";
    }
    return $isotime;
}

#my $msg;
if (int(@ARGV) > 1) { 
    if ($ARGV[1] =~ /^(ASSERTION|FATAL|EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG)$/) {
	$msg = $ARGV[1] . "  " . $ARGV[0]; 
    } else {
	die "Invalid log level: \"" . $ARGV[1] . "\"\n";
    }
}
else { $msg = "ERROR  " . $ARGV[0]; }


$SOCK = IO::Socket::UNIX->new(Peer => "/tmp/adas/log.socket", Type => SOCK_STREAM) or die "Can't create socket for ADAS logger, Reason: $!\n";
print $SOCK "<DS_DEBUG>" . isotime() . " $msg\n</DS_DEBUG>";
close $SOCK;
