Renamed 45 ASP files to follow lowercase concatenated naming convention: - Direct handlers: save_machine_direct.asp -> savemachinedirect.asp - USB files: checkin_usb.asp -> checkinusb.asp - API files: api_usb.asp -> apiusb.asp - Map files: network_map.asp -> networkmap.asp - Printer files: printer_lookup.asp -> printerlookup.asp Also: - Updated 84+ internal references across all ASP and JS files - Deleted 6 test/duplicate files (editmacine.asp, test_*.asp) - Updated production migration guide with filename changes - Added rename scripts for Linux (bash) and Windows (PowerShell)
131 lines
3.9 KiB
Plaintext
131 lines
3.9 KiB
Plaintext
<%
|
|
' Cached Zabbix API wrapper with background refresh
|
|
' Include the base zabbix.asp functions
|
|
%>
|
|
<!--#include file="./zabbix.asp"-->
|
|
<%
|
|
|
|
' Main cached function - returns data immediately, refreshes in background if stale
|
|
Function GetPrinterDataCached(hostIP)
|
|
Dim cacheKey, cacheAge, forceRefresh
|
|
cacheKey = "zabbix_" & hostIP
|
|
|
|
' Check if manual refresh was requested
|
|
forceRefresh = (Request.QueryString("refresh") = "1" And Request.QueryString("ip") = hostIP)
|
|
|
|
If forceRefresh Then
|
|
' Clear cache for manual refresh
|
|
Application.Lock
|
|
Application(cacheKey) = Empty
|
|
Application(cacheKey & "_time") = Empty
|
|
Application(cacheKey & "_refreshing") = "false"
|
|
Application.Unlock
|
|
End If
|
|
|
|
' Check if cache exists
|
|
If Not IsEmpty(Application(cacheKey)) And Not forceRefresh Then
|
|
cacheAge = DateDiff("n", Application(cacheKey & "_time"), Now())
|
|
|
|
' If cache is stale (>5 min) AND not already refreshing, trigger background update
|
|
If cacheAge >= 5 And Application(cacheKey & "_refreshing") <> "true" Then
|
|
' Mark as refreshing
|
|
Application.Lock
|
|
Application(cacheKey & "_refreshing") = "true"
|
|
Application.Unlock
|
|
|
|
' Trigger async background refresh (non-blocking)
|
|
On Error Resume Next
|
|
Dim http
|
|
Set http = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
|
|
' True = async (doesn't block user)
|
|
http.Open "GET", "http://localhost/refreshzabbixcache.asp?ip=" & Server.URLEncode(hostIP), True
|
|
http.Send
|
|
Set http = Nothing
|
|
On Error Goto 0
|
|
End If
|
|
|
|
' Return cached data immediately (user doesn't wait)
|
|
GetPrinterDataCached = Application(cacheKey)
|
|
Exit Function
|
|
End If
|
|
|
|
' No cache exists - fetch initial data (first time only, or after manual refresh)
|
|
Dim freshData, zabbixConnected, pingStatus, tonerJSON
|
|
|
|
zabbixConnected = ZabbixLogin()
|
|
|
|
If zabbixConnected = "1" Then
|
|
pingStatus = GetPrinterPingStatus(hostIP)
|
|
tonerJSON = GetPrinterTonerLevels(hostIP)
|
|
Else
|
|
pingStatus = "-1"
|
|
tonerJSON = ""
|
|
End If
|
|
|
|
' Store as array: [connected, pingStatus, tonerJSON]
|
|
Dim resultData(2)
|
|
resultData(0) = zabbixConnected
|
|
resultData(1) = pingStatus
|
|
resultData(2) = tonerJSON
|
|
|
|
' Cache the result
|
|
Application.Lock
|
|
Application(cacheKey) = resultData
|
|
Application(cacheKey & "_time") = Now()
|
|
Application(cacheKey & "_refreshing") = "false"
|
|
Application.Unlock
|
|
|
|
GetPrinterDataCached = resultData
|
|
End Function
|
|
|
|
' Helper function to get cache age (for display purposes)
|
|
Function GetCacheAge(hostIP)
|
|
Dim cacheKey, cacheTime
|
|
cacheKey = "zabbix_" & hostIP
|
|
|
|
If IsEmpty(Application(cacheKey & "_time")) Then
|
|
GetCacheAge = -1
|
|
Exit Function
|
|
End If
|
|
|
|
GetCacheAge = DateDiff("s", Application(cacheKey & "_time"), Now())
|
|
End Function
|
|
|
|
' Clear cache for a specific printer (called by manual refresh)
|
|
Sub ClearPrinterCache(hostIP)
|
|
Dim cacheKey
|
|
cacheKey = "zabbix_" & hostIP
|
|
|
|
Application.Lock
|
|
Application(cacheKey) = Empty
|
|
Application(cacheKey & "_time") = Empty
|
|
Application(cacheKey & "_refreshing") = "false"
|
|
Application.Unlock
|
|
End Sub
|
|
|
|
' Clear all Zabbix cache (admin function)
|
|
Sub ClearAllZabbixCache()
|
|
Dim key, keysToRemove(), count, i
|
|
count = 0
|
|
|
|
' First pass: collect keys to remove
|
|
ReDim keysToRemove(100) ' Initial size
|
|
For Each key In Application.Contents
|
|
If Left(key, 7) = "zabbix_" Then
|
|
keysToRemove(count) = key
|
|
count = count + 1
|
|
If count Mod 100 = 0 Then
|
|
ReDim Preserve keysToRemove(count + 100)
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
' Second pass: remove collected keys
|
|
Application.Lock
|
|
For i = 0 To count - 1
|
|
Application.Contents.Remove(keysToRemove(i))
|
|
Next
|
|
Application.Unlock
|
|
End Sub
|
|
%>
|