Hướng dẫn tạo mail cảnh báo: sử dụng thread và mẫu tin cảnh báo
Table of Contents
|
Hướng dẫn tạo mail cảnh báo tự động trên wak.
Các File cần tạo
1.Tạo thread trong thư mục conf/thread
2. NotificationHelper.dic
3.mail_sender.thread
Cách làm
Để minh họa cho cách làm =>sẽ cùng giải quyết bài toán sau :
Mail cảnh báo cho người dùng rằng đã đăng nhập quá 5 lần trên vào hệ thống
SELECT DISTINCT(ads.user_id),
adu.FULL_NAME,adu.user_name,
COUNT(session_id),
NVL(adu.email,'truongnv1@ftl.vn')
FROM adm_session ads,
adm_user adu
WHERE ads.created<=sysdate
AND ads.created+1 >sysdate
AND ads.user_id =adu.user_id
GROUP BY ads.user_id,
adu.FULL_NAME,adu.user_name,
adu.email
HAVING COUNT(session_id)>5

Giao diện trực quan

Mã nguồn:
ThreadName==Notification user sigin more 10 time in day
ClassName==com.ftl.thread.EventProcessThread
StartupType==2
Parameter
LogDir==log/mail_event_notifier_00110_NOTIFY_USER_SIGIN_MORE_TIME_IN_DAY
AlertByMail==true
Interval==600
ProcessorClass==com.ftl.thread.MailNotifier
ProcessorList
NOTIFY_USER_SIGIN_MORE_TIME_IN_DAY==Thông báo cho cán bộ tổng hợp thực hiện báo cáo trước 2 ngày
QueryEventSql=:
:{
SELECT DISTINCT(ads.user_id),
adu.FULL_NAME,
COUNT(session_id),nvl(adu.email,'truongnv1@ftl.vn'),to_char(sysdate,'dd/mm/yyyy'),adu.user_name
FROM adm_session ads,
adm_user adu
WHERE ads.created<=sysdate
AND ads.created+1 >sysdate
AND ads.user_id =adu.user_id
GROUP BY ads.user_id,
adu.FULL_NAME,adu.email,adu.user_name
:}
SyncGroup
Category==Cảnh báo
Schedule==0 0 8 * * ?
Bước 2: Tạo notification_template
Truy câp theo đường dẫn Hệ thống
/Cấu hình và tùy chọn
/Danh mục mẫu tin cảnh báo
Kết quả hiện ra như sau

Giải thích
Sử dụng mã MVEL để viết code
-Sử dụng cú pháp @{row[i]} để lấy ra được các trường tương ứng đã được querry ra bên thread
Cấu hình chi tiết trong file .dic để tạo bảng tổng hợp danh sách IP.Trong đó ip_addresslà danh sách các IP tương ứng của user_id: @row[0].
Tạo bảng trong cảnh báo:
Tạo header:
<table style="width:100%;border-collapse:collapse;border: 1px solid black;"> <tbody>
<tr style="border:1px solid black;">
<th style="border:1px solid black;">STT</th>
<th style="border:1px solid black;">Địa chỉ IP đăng nhập</th>
<th style="border:1px solid black;">Số lần đăng nhập/trên ngày</th>
@foreach{ip : ip_address}
<tr>
<td style="border:1px solid black;" align="center">@{++i}</td>
<td style="border:1px solid black;" align="center">@{ip.get(0)}</td>
<td style="border:1px solid black;" align="center">@{ip.get(1)}</td>
</tr>
@end{}
<tr>
</tr>
</tbody>
</table>
Trong đó ip.get(i) là lấy trường thứ i từ querry
Kết quả cần đạt được

Trong đó mã nguồn được thể hiện như sau.
NOTIFY_USER_SIGIN_MORE_TIME_IN_DAY==Cảnh báo user đăng nhập nhiều lần trong ngày
Mail
MvelHeader=:
:{
@code{
i=0;
//Lấy ra những địa chỉ IP đã dùng để đăng nhập vào hệ thống theo từng user
ip_address=com.ftl.sql.Database.executeQuery(cn,"SELECT DISTINCT(ip_address),
COUNT(ip_address) FROM adm_session ads WHERE ads.created<=sysdate AND ads.created+1 >sysdate AND ads.user_id ='"+row[0]+"' GROUP BY ip_address");
//row[0] :lấy giá trị từ bên thread truyền sang
}
:}
Recipient==@{row[3]}
CC
Subject==[TEST] Cảnh báo đăng nhập vào hệ thống nhiều lần trong ngày @{row[4]}
Content=:
:{
<p>Kính gửi anh/chị<strong> @{row[1]}</strong></p>
<p>Hệ thống [Test] ghi nhận trong ngày @{row[4]} ,tài khoản @{row[5]} của anh chị đã thực hiện đăng nhập vào hệ thống hơn 10 lần( @{row[2]} lần) trong ngày,sử dụng các IP và số lần cụ thể như sau:</p>
<p> </p>
<table style="width:100%;border-collapse:collapse;border: 1px solid black;">
<tbody>
<tr style="border:1px solid black;">
<th style="border:1px solid black;">STT</th>
<th style="border:1px solid black;">Địa chỉ IP đăng nhập</th>
<th style="border:1px solid black;">Số lần đăng nhập/trên ngày</th>
<th style="border:1px solid black;">Địa chỉ</th>
@foreach{ip : ip_address}
<tr>
<td style="border:1px solid black;" align="center">@{++i}</td>
<td style="border:1px solid black;" align="center">@{ip.get(0)}</td>
<td style="border:1px solid black;" align="center">@{ip.get(1)}</td>
<td style="border:1px solid black;" align="center"><a href="http://api.ipinfodb.com/v3/ip-city/?key=20b96dca8b9a5d37b0355e9461c66e76eed30a2274422fa6213d9de6ffb2b34e&ip=@{ip.get(0)}">Chi tiết</a></td>
</tr>
@end{}
<tr>
</tr>
</tbody>
</table>
:}
SMS
MvelHeader
Recipient
CC
Content==a