#!/usr/bin/php
<?php

date_default_timezone_set('Asia/Jakarta');

/* ==========================
   Database
========================== */

$host = "localhost";
$db   = "veex";
$user = "veex";
$pass = "*TN3Bg)uvD7eQ4e5";

try {
    $pdo = new PDO(
        "mysql:host=$host;dbname=$db;charset=utf8mb4",
        $user,
        $pass,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ]
    );
} catch(PDOException $e){
    file_put_contents("/tmp/trap_error.log",$e->getMessage().PHP_EOL,FILE_APPEND);
    exit;
}


/* ==========================
   Baca Trap dari STDIN
========================== */

$raw = file_get_contents("php://stdin");


/* ==========================
   Fungsi Regex
========================== */

function regexValue($pattern, $text)
{
    if (preg_match($pattern, $text, $m)) {
        return trim($m[1]);
    }
    return null;
}


/* ==========================
   Parsing
========================== */

// Source IP
$source_ip = null;
if (preg_match('/UDP:\s+\[([^\]]+)\]/', $raw, $m)) {
    $source_ip = $m[1];
}


$status = regexValue('/36290\.1\s+"([^"]+)"/', $raw);

$alarm = regexValue('/36290\.2\s+"([^"]+)"/', $raw);

$severity = regexValue('/36290\.3\s+"([^"]+)"/', $raw);

$alarm_time = regexValue('/36290\.4\s+"([^"]+)"/', $raw);

$serial = regexValue('/36290\.5\s+"([^"]+)"/', $raw);

$ont_ip = regexValue('/36290\.6\s+"([^"]+)"/', $raw);

$pon = regexValue('/36290\.7\s+"([^"]+)"/', $raw);

$distance = regexValue('/36290\.8\s+"([^"]+)"/', $raw);

$trap_oid = regexValue('/1\.1\.4\.1\.0\s+([^\s]+)/', $raw);


/* ==========================
   Simpan Database
========================== */

$sql = "
INSERT INTO trap_alarm
(
trap_oid,
alarm_status,
alarm_name,
severity,
alarm_time,
serial_number,
ip_address,
pon_port,
distance,
source_ip,
raw_data
)
VALUES
(
?,?,?,?,?,?,?,?,?,?,?
)
";

$stmt = $pdo->prepare($sql);

$stmt->execute([
    $trap_oid,
    $status,
    $alarm,
    $severity,
    $alarm_time,
    $serial,
    $ont_ip,
    $pon,
    $distance,
    $source_ip,
    $raw
]);

?>