<%@ Language=VBScript %> <% Response.ContentType = "application/json" On Error Resume Next %> <% ' Check database connection If Not IsObject(objConn) Then Response.Write "{""success"": false, ""error"": ""Database connection failed""}" Response.End End If ' Configuration Const VENDOR_API_URL = "http://10.48.130.113:8080/custom/vendor-api-proxy.php" Const BATCH_SIZE = 10 ' Variables Dim strSQL, rsWarranties, total, updated, errors, errorDetails, errorCount updated = 0 errors = 0 errorCount = 0 errorDetails = "" ' Find PCs without warranty - PHASE 2: Use machines table strSQL = "SELECT machineid, hostname, serialnumber FROM machines " & _ "WHERE pctypeid IS NOT NULL " & _ "AND serialnumber IS NOT NULL AND serialnumber <> 'N/A' AND serialnumber <> '' " & _ "AND LENGTH(serialnumber) >= 5 AND isactive = 1 " & _ "AND machineid NOT IN (SELECT machineid FROM warranties WHERE enddate IS NOT NULL)" Set rsWarranties = Server.CreateObject("ADODB.Recordset") rsWarranties.CursorLocation = 3 rsWarranties.Open strSQL, objConn ' Check for errors If Err.Number <> 0 Then Response.Write "{""success"": false, ""error"": ""Query failed: " & Replace(Err.Description, """", "'") & """}" Response.End End If ' Check if empty If rsWarranties.EOF Then Response.Write "{""success"": true, ""message"": ""No devices require warranty checks"", ""total"": 0, ""updated"": 0, ""errors"": 0}" rsWarranties.Close objConn.Close Response.End End If ' Count and build arrays total = 0 rsWarranties.MoveFirst Do While Not rsWarranties.EOF total = total + 1 rsWarranties.MoveNext Loop Dim serviceTagList(), deviceInfo() ReDim serviceTagList(total - 1) ReDim deviceInfo(total - 1) rsWarranties.MoveFirst Dim i i = 0 Do While Not rsWarranties.EOF serviceTagList(i) = Trim(rsWarranties("serialnumber")) Set deviceInfo(i) = CreateObject("Scripting.Dictionary") deviceInfo(i)("machineid") = rsWarranties("machineid") deviceInfo(i)("hostname") = rsWarranties("hostname") i = i + 1 rsWarranties.MoveNext Loop rsWarranties.Close Set rsWarranties = Nothing ' Process in batches Dim batchStart, batchEnd, j, batchTags, apiUrl, xmlhttp, responseText Dim warrantyEndDate, serviceLevel, warrantyStatus, apiResponse For i = 0 To total - 1 Step BATCH_SIZE batchStart = i batchEnd = i + BATCH_SIZE - 1 If batchEnd >= total Then batchEnd = total - 1 ' Build service tag list batchTags = "" For j = batchStart To batchEnd If batchTags <> "" Then batchTags = batchTags & "," batchTags = batchTags & serviceTagList(j) Next ' Call API apiUrl = VENDOR_API_URL & "?vendor=dell&action=warranty-batch&servicetags=" & Server.URLEncode(batchTags) Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") xmlhttp.setTimeouts 30000, 30000, 30000, 30000 xmlhttp.Open "GET", apiUrl, False xmlhttp.setRequestHeader "Accept", "application/json" xmlhttp.Send If Err.Number = 0 Then responseText = xmlhttp.responseText If InStr(responseText, """success"":true") > 0 Then For j = batchStart To batchEnd warrantyEndDate = ExtractWarrantyData(responseText, serviceTagList(j), "warrantyEndDate") serviceLevel = ExtractWarrantyData(responseText, serviceTagList(j), "serviceLevel") warrantyStatus = ExtractWarrantyData(responseText, serviceTagList(j), "warrantyStatus") If warrantyEndDate <> "" Then ' PHASE 2: Insert into warranties table instead of updating machines strSQL = "INSERT INTO warranties (machineid, enddate, servicelevel, lastcheckeddate) " & _ "VALUES (" & deviceInfo(j)("machineid") & ", '" & Replace(warrantyEndDate, "'", "''") & "', " & _ "'" & Replace(Left(serviceLevel, 100), "'", "''") & "', NOW()) " & _ "ON DUPLICATE KEY UPDATE enddate = VALUES(enddate), servicelevel = VALUES(servicelevel), lastcheckeddate = NOW()" objConn.Execute strSQL If Err.Number = 0 Then updated = updated + 1 Else errors = errors + 1 If errorCount < 10 Then If errorDetails <> "" Then errorDetails = errorDetails & ", " errorDetails = errorDetails & "{""pc"":""" & deviceInfo(j)("hostname") & """,""serial"":""" & serviceTagList(j) & """,""reason"":""DB update failed: " & Replace(Err.Description, """", "'") & """}" errorCount = errorCount + 1 End If Err.Clear End If Else errors = errors + 1 If errorCount < 10 Then If errorDetails <> "" Then errorDetails = errorDetails & ", " errorDetails = errorDetails & "{""pc"":""" & deviceInfo(j)("hostname") & """,""serial"":""" & serviceTagList(j) & """,""reason"":""No warranty data found in API response""}" errorCount = errorCount + 1 End If End If Next Else errors = errors + (batchEnd - batchStart + 1) If errorCount < 10 Then apiResponse = Left(Replace(Replace(responseText, """", "'"), vbCrLf, " "), 200) For j = batchStart To batchEnd If errorCount >= 10 Then Exit For If errorDetails <> "" Then errorDetails = errorDetails & ", " errorDetails = errorDetails & "{""pc"":""" & deviceInfo(j)("hostname") & """,""serial"":""" & serviceTagList(j) & """,""reason"":""API response indicated failure - " & apiResponse & """}" errorCount = errorCount + 1 Next End If End If Else errors = errors + (batchEnd - batchStart + 1) If errorCount < 10 Then For j = batchStart To batchEnd If errorCount >= 10 Then Exit For If errorDetails <> "" Then errorDetails = errorDetails & ", " errorDetails = errorDetails & "{""pc"":""" & deviceInfo(j)("hostname") & """,""serial"":""" & serviceTagList(j) & """,""reason"":""API request failed: " & Replace(Err.Description, """", "'") & """}" errorCount = errorCount + 1 Next End If Err.Clear End If Set xmlhttp = Nothing Next ' Return response Dim responseJson responseJson = "{""success"": true, ""total"": " & total & ", ""updated"": " & updated & ", ""errors"": " & errors If errorDetails <> "" Then responseJson = responseJson & ", ""errorDetails"": [" & errorDetails & "]" End If responseJson = responseJson & "}" Response.Write responseJson objConn.Close ' Extract warranty data from JSON Function ExtractWarrantyData(jsonText, serviceTag, fieldName) Dim pattern, startPos, endPos, value, fieldPattern pattern = """serviceTag"":""" & serviceTag & """" startPos = InStr(jsonText, pattern) If startPos > 0 Then fieldPattern = """" & fieldName & """:""" startPos = InStr(startPos, jsonText, fieldPattern) If startPos > 0 Then startPos = startPos + Len(fieldPattern) endPos = InStr(startPos, jsonText, """") If endPos > startPos Then ExtractWarrantyData = Mid(jsonText, startPos, endPos - startPos) Exit Function End If End If End If ExtractWarrantyData = "" End Function %>