<%@ 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/vendor-api-proxy.php" Const BATCH_SIZE = 10 ' Variables Dim strSQL, rsWarranties, total, updated, errors updated = 0 errors = 0 ' 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 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 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 Err.Clear End If Else errors = errors + 1 End If Next Else errors = errors + (batchEnd - batchStart + 1) End If Else errors = errors + (batchEnd - batchStart + 1) Err.Clear End If Set xmlhttp = Nothing Next ' Return response Response.Write "{""success"": true, ""total"": " & total & ", ""updated"": " & updated & ", ""errors"": " & errors & "}" 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 %>