Files
shopdb/includes/zabbix_cached.asp
cproudlock 249bfbba8c Standardize ASP filenames: remove underscores
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)
2025-12-10 20:40:05 -05:00

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
%>