User Tools

Site Tools


start:utils:cockpit:p1:cpu:criticity

Ticket Criticity

Comme l'on pourrait sélectionner autre chose que des P1, ce menu permet d'indiquer la criticité des différentes priorités sélectionnées.

WebCriticity.py

WebCriticity.py
# WebCriticity.py
import PersistentData
import CockpitITSM
 
def init_criticity_interface(ui):
    """
    Registers the bridge between Criticity.html and Python logic.
    Allows assigning a criticity level to each selected ticket priority.
 
    Criticity values:
        1 = VERY_HIGH
        2 = HIGH
        3 = MEDIUM
        4 = LOW
        5 = INFORMATION
    """
 
    def handle_get_ticket_criticity(_, __):
        """Syncs with API then returns ticket priorities with their criticity from DB."""
        success = CockpitITSM.update_ticket_priorities()
 
        if not success:
            ui.send_message("criticity_response", {
                "success": False,
                "message": "Failed to refresh ticket priorities. Check API configuration."
            })
            return
 
        priorities = PersistentData.get_ticket_priorities_with_criticity()
        ui.send_message("criticity_data", {"priorities": priorities})
 
    def handle_save_ticket_criticity(_, data):
        """Persists the criticity level for each ticket priority."""
        try:
            priorities = data.get("priorities", [])
            for p in priorities:
                criticity = int(p.get("criticity", 0))
                # Clamp to valid range 0–5
                criticity = max(0, min(5, criticity))
                PersistentData.db.update(
                    "objects",
                    {"criticity": criticity},
                    condition=f"id = {p['id']} AND subType = '{p['subType']}'"
                )
            print(f"DEBUG: Saved criticity for {len(priorities)} ticket priorities.")
            ui.send_message("criticity_response", {
                "success": True,
                "message": f"Criticity saved ({len(priorities)} priorities)."
            })
        except Exception as e:
            print(f"ERROR saving ticket criticity: {str(e)}")
            ui.send_message("criticity_response", {
                "success": False,
                "message": f"Save error: {str(e)}"
            })
 
    # Registering the handlers
    ui.on_message("get_ticket_criticity",  handle_get_ticket_criticity)
    ui.on_message("save_ticket_criticity", handle_save_ticket_criticity)

Criticity.html

Criticity.html
# WebCriticity.py
import PersistentData
import CockpitITSM
 
def init_criticity_interface(ui):
    """
    Registers the bridge between Criticity.html and Python logic.
    Allows assigning a criticity level to each selected ticket priority.
 
    Criticity values:
        1 = VERY_HIGH
        2 = HIGH
        3 = MEDIUM
        4 = LOW
        5 = INFORMATION
    """
 
    def handle_get_ticket_criticity(_, __):
        """Syncs with API then returns ticket priorities with their criticity from DB."""
        success = CockpitITSM.update_ticket_priorities()
 
        if not success:
            ui.send_message("criticity_response", {
                "success": False,
                "message": "Failed to refresh ticket priorities. Check API configuration."
            })
            return
 
        priorities = PersistentData.get_ticket_priorities_with_criticity()
        ui.send_message("criticity_data", {"priorities": priorities})
 
    def handle_save_ticket_criticity(_, data):
        """Persists the criticity level for each ticket priority."""
        try:
            priorities = data.get("priorities", [])
            for p in priorities:
                criticity = int(p.get("criticity", 0))
                # Clamp to valid range 0–5
                criticity = max(0, min(5, criticity))
                PersistentData.db.update(
                    "objects",
                    {"criticity": criticity},
                    condition=f"id = {p['id']} AND subType = '{p['subType']}'"
                )
            print(f"DEBUG: Saved criticity for {len(priorities)} ticket priorities.")
            ui.send_message("criticity_response", {
                "success": True,
                "message": f"Criticity saved ({len(priorities)} priorities)."
            })
        except Exception as e:
            print(f"ERROR saving ticket criticity: {str(e)}")
            ui.send_message("criticity_response", {
                "success": False,
                "message": f"Save error: {str(e)}"
            })
 
    # Registering the handlers
    ui.on_message("get_ticket_criticity",  handle_get_ticket_criticity)
    ui.on_message("save_ticket_criticity", handle_save_ticket_criticity)

app_criticity.js

app_criticity.js
// app_criticity.js
const socket = io();
 
// Criticity levels mapping
const CRITICITY_LEVELS = [
    { value: 0, label: "0 - (undefined)"  },
    { value: 1, label: "1 - VERY_HIGH"    },
    { value: 2, label: "2 - HIGH"         },
    { value: 3, label: "3 - MEDIUM"       },
    { value: 4, label: "4 - LOW"          },
    { value: 5, label: "5 - INFORMATION"  }
];
 
// ── Socket events ─────────────────────────────────────────────────────────────
 
socket.on("connect", () => {
    console.log("Connected to server");
    setStatus("Loading ticket priorities...", null);
    socket.emit("get_ticket_criticity", {});
});
 
socket.on("connect_error", (err) => {
    console.error("Connection error:", err);
    setStatus("Connection error. Please reload.", false);
});
 
socket.on("criticity_data", function(data) {
    renderCriticityList(data.priorities || []);
    setStatus("", null);
});
 
socket.on("criticity_response", function(data) {
    setStatus(data.message, data.success);
});
 
// ── Actions ───────────────────────────────────────────────────────────────────
 
function saveCriticity() {
    const selects = document.querySelectorAll(".criticity-select");
    const priorities = Array.from(selects).map(sel => ({
        id:       parseInt(sel.dataset.id),
        subType:  sel.dataset.subtype,
        criticity: parseInt(sel.value)
    }));
 
    if (priorities.length === 0) {
        setStatus("No priorities to save.", false);
        return;
    }
 
    setStatus("Saving...", null);
    socket.emit("save_ticket_criticity", { priorities: priorities });
}
 
// ── Rendering ─────────────────────────────────────────────────────────────────
 
function renderCriticityList(priorities) {
    const container = document.getElementById("criticityList");
 
    if (priorities.length === 0) {
        container.innerHTML = '<div class="criticity-list-empty">No ticket priorities found.</div>';
        return;
    }
 
    container.innerHTML = priorities.map(p => {
        const selectId = `criticity_${p.id}_${escapeAttr(p.subType)}`;
        const options = CRITICITY_LEVELS.map(level =>
            `<option value="${level.value}" ${p.criticity === level.value ? "selected" : ""}>${escapeHtml(level.label)}</option>`
        ).join("");
 
        return `
        <div class="criticity-item">
            <label for="${selectId}">${escapeHtml(p.subType)} / ${escapeHtml(p.reference)}</label>
            <select
                class="criticity-select"
                id="${selectId}"
                data-id="${p.id}"
                data-subtype="${escapeAttr(p.subType)}"
                data-value="${p.criticity}"
                onchange="updateSelectColor(this)"
            >${options}</select>
        </div>
        `;
    }).join("");
 
    // Apply colors on initial render
    document.querySelectorAll(".criticity-select").forEach(updateSelectColor);
}
 
function updateSelectColor(sel) {
    sel.dataset.value = sel.value;
}
 
// ── Helpers ───────────────────────────────────────────────────────────────────
 
function setStatus(message, success) {
    const el = document.getElementById("statusMessage");
    el.innerText = message;
    if (success === true)       el.style.color = "#4db6ac";
    else if (success === false) el.style.color = "#e57373";
    else                        el.style.color = "#bb86fc";
}
 
function escapeHtml(str) {
    return String(str)
        .replace(/&/g, "&amp;")
        .replace(/</g, "&lt;")
        .replace(/>/g, "&gt;")
        .replace(/"/g, "&quot;");
}
 
function escapeAttr(str) {
    return String(str).replace(/[^a-zA-Z0-9_-]/g, "_");
}
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
start/utils/cockpit/p1/cpu/criticity.txt · Last modified: by admin_wiki