개발자모드
flask run --host=192.168.0.21 --port=5000
flask syslog데이터 가져오기
security/models.py에 syslog데이트를 가져오기 위해 SystemEvents 추가하기
class SystemEvents(db.Model):
__tablename__ = 'SystemEvents'
ID = db.Column(db.Integer, primary_key=True)
CustomerID = db.Column(db.BigInteger, nullable=True)
ReceivedAt = db.Column(db.DateTime(), nullable=True)
DeviceReportedTime = db.Column(db.DateTime(), nullable=True)
Facility = db.Column(db.SmallInteger, nullable=True)
Priority = db.Column(db.SmallInteger, nullable=True)
FromHost = db.Column(db.String(60), nullable=True)
Message = db.Column(db.Text, nullable=False)
NTSeverity = db.Column(db.Integer, nullable=True)
Importance = db.Column(db.Integer, nullable=True)
EventSource = db.Column(db.String(60), nullable=True)
EventUser = db.Column(db.String(60), nullable=True)
EventCategory = db.Column(db.Integer, nullable=True)
EventID = db.Column(db.Integer, nullable=True)
EventBinaryData = db.Column(db.Text, nullable=True)
MaxAvailable = db.Column(db.Integer, nullable=True)
CurrUsage = db.Column(db.Integer, nullable=True)
MinUsage = db.Column(db.Integer, nullable=True)
MaxUsage = db.Column(db.Integer, nullable=True)
InfoUnitID = db.Column(db.Integer, nullable=True)
SysLogTag = db.Column(db.String(60), nullable=True)
EventLogType = db.Column(db.String(60), nullable=True)
GenericFileName = db.Column(db.String(60), nullable=True)
SystemID = db.Column(db.Integer, nullable=True)
template/syslog/index.html
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">실시간 로그 현황</h6>
</div>
<div class="card-body">
<!-- 검색 폼 추가 -->
<form method="get" action="{{ url_for('syslog.index') }}">
<div class="row">
<div class="col-md-3">
<select name="column" class="form-control">
<option value="ID">ID</option>
<option value="ReceivedAt">ReceivedAt</option>
<option value="FromHost">FromHost</option>
<option value="Message">Message</option>
<option value="EventUser">EventUser</option>
</select>
</div>
<div class="col-md-6">
<input type="text" name="search" class="form-control" placeholder="검색어 입력" value="{{ request.args.get('search', '') }}">
</div>
<div class="col-md-3">
<button type="submit" class="btn btn-primary btn-block">검색</button>
</div>
</div>
</form>
<div class="table-responsive">
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<div class="table-responsive">
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>ID</th>
<th>RecivedAt</th>
<th>FromHost</th>
<th>Message</th>
</tr>
</thead>
<tbody>
{% if syslog %}
{% for data in syslog%}
<tr>
<td>{{data.ID}}</td>
<td>{{data.ReceivedAt}}</td>
<td>{{data.FromHost}}</td>
<td>{{data.Message}}</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan=5>데이터 없음</td>
</tr>
{% endif %}
</tbody>
<tfoot>
<tr>
<th>ID</th>
<th>RecivedAt</th>
<th>FromHost</th>
<th>Message</th>
</tr>
</tfoot>
</table>
</div>
<div class="pagination">
{% if syslog.has_prev %}
<a href="{{ url_for('syslog.index', page=syslog.prev_num) }}">이전</a>
{% endif %}
<span>Page {{ syslog.page }} of {{ syslog.pages }}</span>
{% if syslog.has_next %}
<a href="{{ url_for('syslog.index', page=syslog.next_num) }}">다음</a>
{% endif %}
</div>
</div>
</div>
views에 syslog.py수정
from flask import Blueprint, render_template, request
from security.models import SystemEvents
bp = Blueprint('syslog', __name__, url_prefix='/syslog')
@bp.route('/')
def index():
# 페이지 정보
page = request.args.get('page', 1, type=int)
per_page = 10
# 검색 필터링 처리
column = request.args.get('column', 'ID') # 기본값은 'ID'
search = request.args.get('search', '')
# 쿼리 필터링
if search:
# 해당 컬럼에 대해 'search' 값으로 LIKE 쿼리 실행
filter_condition = getattr(SystemEvents, column).like(f'%{search}%')
datas = SystemEvents.query.filter(filter_condition).order_by(SystemEvents.ID.desc()).paginate(page=page, per_page=per_page)
else:
datas = SystemEvents.query.order_by(SystemEvents.ID.desc()).paginate(page=page, per_page=per_page)
return render_template('syslog/index.html', syslog=datas)