หากต้องการเก็บ LOGON และ LOGOFF เพิ่มไว้ที่ mysql server

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อ 15-04-2563
ดูแลโดย WIBOON

  • Windows ในห้องบริการคอมพิวเตอร์ ที่ได้ติดตั้ง logticker.vbs และ stopticker.vbs เอาไว้ เมื่อมีผู้ใช้ login/logout จะมี log แบบ text เก็บอยู่ใน /var/www/ticker/datalog/ แยกไดเรกทอรีเป็นปีเดือนวัน เช่น
    /var/www/ticker/datalog/2020/04/15
    โดยมีชื่อไฟล์ยาว ๆ แบบนี้ zone1:20200414105851:98EECB9937A0:192.168.6.151:john:.txt
    ข้างในมี 1 บรรทัด
    zone1:20200414105851:98EECB9937A0:192.168.6.151:john:ACER11:LOGOFF:20200414115553:3422:
    สถานะ LOGON/ALIVE/LOGOFF ดังนี้ LOGON=login ALIVE=ทุก 2 นาที LOGOFF=logout หรือ shutdown


หากต้องการเก็บ LOGON และ LOGOFF เพิ่มไว้ที่ mysql server มีวิธีที่ต้องแก้ไขเพิ่มเติมเอง ดังนี้
โดยแทนที่ tickerpassword ด้วยรหัสผ่านของท่าน

[1. ที่เครื่อง mysql server]

mama@mysql_nfs:~$ mysql -u root -p
Enter password:

mysql> CREATE DATABASE myticker CHARACTER SET 'UTF8';
mysql> CREATE USER 'tickeruser'@'%' IDENTIFIED BY 'tickerpassword';
mysql> GRANT ALL PRIVILEGES ON myticker.* TO 'tickeruser'@'%';
mysql> FLUSH PRIVILEGES;
mysql> quit
Bye

mama@mysql_nfs:~$ mysql -u tickeruser -p
Enter password:

mysql> use myticker;
mysql> CREATE TABLE datalog ( `id` int auto_increment, `zonename` varchar(6) not null, `time1` varchar(14) not null, `mac` varchar(12) not null, `clientip` varchar(15) not null, `username` varchar(20) not null, `compname` varchar(20) not null, `status` varchar(6) not null, `time2` varchar(14) not null, `usetime` int, primary key (`id`) ) ENGINE=INNODB CHARSET=utf8 COLLATE utf8_unicode_ci;
Query OK, 0 rows affected (0.05 sec)

mysql> show tables;
+--------------------+
| Tables_in_myticker |
+--------------------+
| datalog            |
+--------------------+


[2. ที่เครื่อง psu12-sritrang server]
เปลี่ยน myticker.php เดิม ด้วย code ข้างล่างนี้ และเปลี่ยน 192.168.6.xx เป็น IP ของ mysql server ที่จะใช้
root@psu12:/var/www/ticker# cat myticker.php

// myticker.php
// updated by WIPAT 2555-02-15 text file
// updated by WIBOON 2563-04-14 mysql database
<?php

// get value from logticker.vbs and stopticker.vbs
$Var=$_GET['LOG'];

// text file log record in /var/www/ticker/datalog/
exec("/bin/bash /var/www/ticker/log-ticker.sh $Var");

// mysql database log record
$servername = "192.168.6.xx";
$sqlusername = "tickeruser";
$sqlpassword = "tickerpassword";

list($zonename, $time1, $mac, $clientip, $username, $compname, $status, $time2, $usetime) = explode(":", $Var);

if ( $status === 'ALIVE' )
{
    echo 'do nothing';
} else {
    $sql = "INSERT INTO datalog (zonename, time1, mac, clientip, username, compname, status, time2, usetime) VALUES ('$zonename', '$time1', '$mac', '$clientip', '$username', '$compname', '$status', '$time2', '$usetime')";

    try {
    $conn = new PDO("mysql:host=$servername;dbname=myticker", $sqlusername, $sqlpassword);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // use exec() because no results are returned
    $conn->exec($sql);
    echo "New record created successfully";
    }

    catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

    $conn = null;
}
?>

root@psu12:/var/www/ticker#

[3. ทดสอบ]
เปิด Windows แล้ว login จากนั้น vbscript logticker.vbs ทำงาน ส่ง LOGON และ ทุก ๆ 2 นาที ส่ง ALIVE และจำนวนวินาทีที่ใช้ (และเมื่อ user logout หรือ shutdown ก็ stopticker.vbs ทำงานส่ง LOGOFF ไปแทนคำว่า ALIVE)
ตรวจสอบดูว่ามี log ที่เครื่อง mysql server

mama@mysql_nfs:~$ mysql -u tickeruser -p
Enter password:

mysql> use myticker;
mysql> select * from datalog where id > 18;
+----+----------+----------------+--------------+---------------+----------+----------+--------+----------------+---------+
| id | zonename | time1          | mac          | clientip      | username | compname | status | time2          | usetime |
+----+----------+----------------+--------------+---------------+----------+----------+--------+----------------+---------+
| 19 | zone1    | 20200414105851 | 98EECB9937A0 | 192.168.6.151 | john     | ACER11   | LOGON  | 20200414105851 |       0 |
| 20 | zone1    | 20200414105851 | 98EECB9937A0 | 192.168.6.151 | john     | ACER11   | LOGOFF | 20200414115553 |    3422 |
+----+----------+----------------+--------------+---------------+----------+----------+--------+----------------+---------+
2 rows in set (0.00 sec)

หมายเหตุ time1 และ time2 อยู่ในรูปแบบ yyyymmddhhmmss