Reference Notes:
Requirements:
We want to send email/sms alert to user about his service package change with old/new package name details. Although this function is builtin in RM , but with customized scripts we can do other functions as well.
Solution:
We will create mysql trigger that will be executed every time srvid column will be changed in rm_users table. then we will create mysql table which will hold all these info. Then the trigger will add user info like old service id , new service id, user name, mobile etc in this table upon srvid change.
Neat & clean.
First create mySQL trigger which will be executed once there will be changes made in srvid column in rm_users table.
1- mySQL Trigger
Create file name srvchangetriggers.sql and paste following data
-- MySQL dump 10.13 Distrib 5.5.46, for debian-linux-gnu (i686) -- Host: localhost Database: radius -- Syed Jahanzaib -- ------------------------------------------------------ -- Server version 5.5.46-0ubuntu0.12.04.2-log DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `myTrigger` BEFORE UPDATE ON `rm_users` FOR EACH ROW BEGIN IF NEW.srvid <> OLD.srvid THEN INSERT INTO rm_usersrvchangehistory (datetime, username, newsrvid, oldsrvid, firstname, lastname, mobile) VALUES (NOW(), new.username, new.srvid, old.srvid, new.firstname, new.lastname, new.mobile); END IF; END */;; DELIMITER ; -- Dumping routines for database 'radius' --
2- mySQL Table
Add mySQL table where records will be saved.
Create file name rmsrvchangetable.sql and paste following date
-- phpMyAdmin SQL Dump -- version 3.4.10.1deb1 -- http://www.phpmyadmin.net -- Syed Jahanzaib -- Host: localhost -- Generation Time: Jun 13, 2016 at 10:32 AM -- Server version: 5.5.46 -- PHP Version: 5.3.10-1ubuntu3.21 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Database: `radius` -- -- -------------------------------------------------------- -- -- Table structure for table `rm_usersrvchangehistory` -- CREATE TABLE IF NOT EXISTS `rm_usersrvchangehistory` ( `id` int(11) NOT NULL AUTO_INCREMENT, `datetime` datetime NOT NULL, `username` varchar(64) NOT NULL, `newsrvid` varchar(64) NOT NULL, `oldsrvid` varchar(64) NOT NULL, `firstname` varchar(64) NOT NULL, `lastname` varchar(64) NOT NULL, `mobile` varchar(64) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=63 ; -- -- Dumping data for table `rm_usersrvchangehistory` -- /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Importing the .sql files in Radius DB / mySQL
Now import both files in radius DB by command
mysql -uroot -pSQLPASS radius < rmsrvchangetable.sql mysql -uroot -pSQLPASS radius < srvchangetriggers.sql
Test The Changes …
Now try to change any user service, and check rm_usersrvchangehistory by following command
root@ubuntu:/temp# mysql -u root -pSQLPASS -e "use radius; select * from rm_usersrvchangehistory;" +----+---------------------+----------+----------+----------+-----------+-----------+-------------+ | id | datetime | username | newsrvid | oldsrvid | firstname | lastname | mobile | +----+---------------------+----------+----------+----------+-----------+-----------+-------------+ | 71 | 2016-06-13 12:24:00 | test | 4 | 13 | syed | jahanzaib | 03333021909 | +----+---------------------+----------+----------+----------+-----------+-----------+-------------+
Script to fetch data on scheduled basis and SMS/EMAIL…
Create a script that will be scheduled to run after every 5 minutes , it will check in table rm_usersrvchangehistory and will send sms to user about package change event.
mkdir /temp && cd /temp touch /temp/srvchange.sh chmod +x temp/srvchange.sh nano temp/srvchange.sh
and paste following data…
the Script:
#!/bin/bash # srvchange.sh # Bash script which will run after every 5 minutes and will fetch info from mysqltable # and will send SMS/Email alert for service change event. # Created by SYED JAHANZAIB # aacable@hotmail.com # https://aacable.wordpress.com # Created : 13-JUN-2016 #set -x SQLUSER="root" SLQPASS="SQLPASS" # File where user info wil be hold temporary TMPUSRINFO=/tmp/usersrvinfo.txt # Interval in minutes to check user record INTERVAL="5" # Fetch user info from the table. mysql -uroot -p$SQLPASS --skip-column-names -e "use radius; select * from rm_usersrvchangehistory WHERE datetime >= NOW() - INTERVAL $INTERVAL MINUTE;" > $TMPUSRINFO # KANNEL DETAILS KHOST="127.0.0.1:13013" KID="kannel" KPASS="kannelpass" # Company Footer COMPANY="JZ_ISP" # Apply Count Loop Formula while deleting first line which have junk text num=0 cat $TMPUSRINFO | while read users do num=$[$num+1] username=`echo $users | awk '{print $4}'` firstname=`echo $users | awk '{print $7}'` lastname=`echo $users | awk '{print $8}'` mobile=`echo $users | awk '{print $9}'` date=`echo $users | awk '{print $2,$3}'` newsrvid=`echo $users | awk '{print $5}'` oldsrvid=`echo $users | awk '{print $6}'` # Print Info on screen # Fetch old/new Package Name OLDPKGNAME=`mysql -u$SQLUSER -p$SQLPASS -e "use radius; SELECT srvname FROM radius.rm_services WHERE rm_services.srvid = '$oldsrvid';" |awk 'FNR == 2'` NEWPKGNAME=`mysql -u$SQLUSER -p$SQLPASS -e "use radius; SELECT srvname FROM radius.rm_services WHERE rm_services.srvid = '$newsrvid';" |awk 'FNR == 2'` # Print FINAL Fetched info echo "Dear $firstname $lastname , Your internet package against your User ID: $username has been upgraded from $OLDPKGNAME to $NEWPKGNAME ! $COMPANY" # Store Info for sending SMS in /tmp folder where we will call kannel to send customized SMS echo "Dear $firstname $lastname , Your internet package against your User ID: $username has been upgraded from $OLDPKGNAME to $NEWPKGNAME ! $COMPANY" > /tmp/$username.srvchange.sms # send sms using kannel gateway curl "http://$KHOST/cgi-bin/sendsms?username=$KID&password=$KPASS&to=$mobile" -G --data-urlencode text@/tmp/$username.srvchange.sms # If you send lot of SMS via local mobile SIM, then make sure you give enough delay so that your SIM may not get blocked by BULK SMS monitor by TELCOM authority like PTA. #sleep 15 done # once done, we should delete the .sms files to clear the garbage rm -fr /tmp/*.sms
End Results !
Now execute the Script and witness the Fun !
Regard’s
Syed Jahanzaib
Filed under: Radius Manager
