File size: 3,605 Bytes
fb5abe4
 
 
 
 
7fa8ebf
fb5abe4
 
2867513
fb5abe4
2867513
 
7fa8ebf
 
 
 
2867513
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fb5abe4
2867513
 
 
 
 
 
 
fb5abe4
 
2867513
fb5abe4
 
2867513
fb5abe4
 
 
 
2867513
 
fb5abe4
 
2867513
fb5abe4
2867513
a1eb974
2867513
fb5abe4
 
2867513
fb5abe4
2867513
 
 
 
fb5abe4
 
2867513
fb5abe4
 
 
 
 
 
2867513
fb5abe4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# app.py

import gradio as gr
import pandas as pd
import numpy as np
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
from sklearn.ensemble import RandomForestClassifier
import joblib
import os

# Step 1: Load Hugging Face model for anomaly detection
# Using the "huggingface-course/distilbert-base-uncased-finetuned-imdb" model
tokenizer = AutoTokenizer.from_pretrained("huggingface-course/distilbert-base-uncased-finetuned-imdb")
model = AutoModelForSequenceClassification.from_pretrained("huggingface-course/distilbert-base-uncased-finetuned-imdb")
anomaly_detection = pipeline("text-classification", model=model, tokenizer=tokenizer)

# Step 2: Train or Load the Random Forest model for failure prediction
if not os.path.exists('failure_prediction_model.pkl'):
    # Sample data (replace this with real Cisco device metrics data)
    data = pd.DataFrame({
        'cpu_usage': [10, 20, 15, 35, 55],
        'memory_usage': [30, 60, 45, 50, 80],
        'error_rate': [0, 1, 0, 2, 5],
        'failure': [0, 1, 0, 1, 1]  # 0 = no failure, 1 = failure
    })

    # Features and target
    X = data[['cpu_usage', 'memory_usage', 'error_rate']]
    y = data['failure']

    # Train the Random Forest model
    failure_prediction_model = RandomForestClassifier(n_estimators=100, random_state=42)
    failure_prediction_model.fit(X, y)

    # Save the model for future use
    joblib.dump(failure_prediction_model, 'failure_prediction_model.pkl')
else:
    # Load the trained model from file
    failure_prediction_model = joblib.load('failure_prediction_model.pkl')

# Step 3: Define function to preprocess logs for anomaly detection
def preprocess_logs(logs):
    logs['timestamp'] = pd.to_datetime(logs['timestamp'])
    logs['log_message'] = logs['log_message'].str.lower()  # Convert log messages to lowercase for uniformity
    return logs

# Step 4: Function to detect anomalies in logs
def detect_anomaly(logs):
    preprocessed_logs = preprocess_logs(logs)
    results = []
    for log in preprocessed_logs['log_message']:
        anomaly_result = anomaly_detection(log)  # Use Hugging Face pipeline for anomaly detection
        results.append(anomaly_result[0]['label'])  # Append label (e.g., "POSITIVE" or "NEGATIVE")
    return results

# Step 5: Function to predict failures based on device metrics
def predict_failure(device_metrics):
    # Convert device metrics into a numpy array for prediction
    metrics_array = np.array([device_metrics['cpu_usage'], device_metrics['memory_usage'], device_metrics['error_rate']]).reshape(1, -1)
    failure_prediction = failure_prediction_model.predict(metrics_array)  # Use the Random Forest model for failure prediction
    return failure_prediction

# Step 6: Function to process logs and predict both anomalies and failures
def process_logs_and_predict(log_file, metrics):
    logs = pd.read_json(log_file)  # Load logs from the uploaded JSON file
    anomalies = detect_anomaly(logs)  # Detect anomalies in logs
    failure_pred = predict_failure(metrics)  # Predict failures using device metrics

    return f"Anomalies Detected: {anomalies}, Failure Prediction: {failure_pred}"

# Step 7: Set up Gradio interface for uploading logs and metrics for prediction
iface = gr.Interface(fn=process_logs_and_predict, 
                     inputs=["file", "json"], 
                     outputs="text", 
                     title="Cisco Device Monitoring",
                     description="Upload log files to detect anomalies and predict potential device failures.")

# Launch the Gradio interface
iface.launch()