58일차

58일차

홈으로 돌아가기


개발자모드
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)