2025-11-13 - 20251113014 (코드 보기)

SKS 홈으로
# analysis & visualization
import pandas         as pd
import numpy          as np
import streamlit      as st
import plotly.express as px 

# llm
import re, os, json, openai, random, time
from   openai import OpenAI
from   dotenv import load_dotenv

# langchain 
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chat_models       import ChatOpenAI 
from langchain.prompts           import ChatPromptTemplate
from langchain.vectorstores      import FAISS
from langchain.text_splitter     import CharacterTextSplitter, RecursiveCharacterTextSplitter
from langchain.chains            import RetrievalQA, LLMChain, ConversationalRetrievalChain


load_dotenv()
api_key = os.getenv('OPENAI_API_KEY')

# 캐싱을 이용해서 데이터를 효율적으로 관리할 수 있다.
@st.cache_data
def load_data() :
    frm = pd.read_csv('../data/attack_stream_logs.csv')
    return frm
frm = load_data()



def view():
    st.set_page_config(page_title='모니터링')
    st.caption('리얼타임 로그 감지 시뮬레이션 feat. attack_stream_logs.csv')
    

    # 상태 초기화
    if 'logs' not in st.session_state :
        st.session_state['logs'] = pd.DataFrame(columns=frm.columns)


    # 출력 영역
    logPrt = st.empty()
    warningPrt = st.empty()
    st.markdown('---')
    st.write('리얼타임으로 로그를 스트링 중.....(5초마다)')

    # 데이터 순차 출력
    for idx, row in frm.iterrows() :
        newLog = row.to_dict()

        # 로그 누적을 위한 세션관리
        st.session_state['logs'] = pd.concat([pd.DataFrame([newLog]), st.session_state['logs']])

        if newLog['risk_score'] >= 85 :
            warningPrt.warning(f'고위험 공격 감지!! 집중')
        else:
            warningPrt.info(f'시스템 정상 작동 중!! 집중하지마')

        #갱신
        logPrt.dataframe(st.session_state['logs'])
        time.sleep(5)


if __name__=='__main__' :
    view()