<%@ Language=VBScript %> <% ' ======================================================================== ' Check All Warranties - Batch Process ' This page checks all PCs without warranty information against Dell API ' ======================================================================== On Error Resume Next Response.Buffer = True Response.ContentType = "application/json" %> <% If Err.Number <> 0 Then Response.Write "{""success"": false, ""error"": ""Database include error: " & Replace(Err.Description, """", "'") & """}" Response.End End If ' Configuration Const VENDOR_API_URL = "http://10.48.130.113/vendor-api-proxy.php" Const BATCH_SIZE = 10 ' Process 10 at a time Dim strSQL Dim serviceTags, serialNumber Dim warrantyData, warrantyResults Dim updated, errors, total Dim response Dim rsWarranties ' Create our own recordset object ' Note: objConn is declared in sql.asp include ' Initialize counters updated = 0 errors = 0 ' Find all PCs without warranty information - 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)" ' Create and open recordset with cursor to support MoveFirst Set rsWarranties = Server.CreateObject("ADODB.Recordset") If Err.Number <> 0 Then Response.Write "{""success"": false, ""error"": ""Failed to create recordset: " & Replace(Err.Description, """", "'") & """}" Response.End End If rsWarranties.CursorLocation = 3 ' adUseClient rsWarranties.Open strSQL, objConn If Err.Number <> 0 Then Response.Write "{""success"": false, ""error"": ""Failed to open recordset: " & Replace(Err.Description, """", "'") & """}" Response.End End If ' Check if we have any records If rsWarranties.EOF Then ' No devices need warranty checks 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 total records Dim serviceTagList() Dim deviceInfo() Dim count count = 0 Do While Not rsWarranties.EOF count = count + 1 rsWarranties.MoveNext Loop total = count ' Reset to beginning rsWarranties.MoveFirst ' Build arrays ReDim serviceTagList(total - 1) ReDim deviceInfo(total - 1) count = 0 Do While Not rsWarranties.EOF serialNumber = Trim(rsWarranties("serialnumber")) serviceTagList(count) = serialNumber Set deviceInfo(count) = CreateObject("Scripting.Dictionary") deviceInfo(count)("machineid") = rsWarranties("machineid") deviceInfo(count)("hostname") = rsWarranties("hostname") deviceInfo(count)("serialnumber") = serialNumber count = count + 1 rsWarranties.MoveNext Loop rsWarranties.Close Set rsWarranties = Nothing ' Process in batches Dim i, batchStart, batchEnd, batchTags Dim batchTagsStr, apiUrl, xmlhttp Dim responseText, json For i = 0 To total - 1 Step BATCH_SIZE batchStart = i batchEnd = i + BATCH_SIZE - 1 If batchEnd >= total Then batchEnd = total - 1 End If ' Build batch of service tags batchTagsStr = "" Dim j For j = batchStart To batchEnd If batchTagsStr <> "" Then batchTagsStr = batchTagsStr & "," End If batchTagsStr = batchTagsStr & serviceTagList(j) Next ' Call vendor API apiUrl = VENDOR_API_URL & "?vendor=dell&action=warranty-batch&servicetags=" & Server.URLEncode(batchTagsStr) Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") xmlhttp.setTimeouts 30000, 30000, 30000, 30000 ' 30 second timeout On Error Resume Next xmlhttp.Open "GET", apiUrl, False xmlhttp.setRequestHeader "Accept", "application/json" xmlhttp.Send If Err.Number <> 0 Then errors = errors + (batchEnd - batchStart + 1) Err.Clear Else responseText = xmlhttp.responseText ' Parse JSON response (simplified - for production use proper JSON parser) ' For now, we'll extract warranty data using string parsing If InStr(responseText, """success"":true") > 0 Then ' Process each warranty in batch For j = batchStart To batchEnd serialNumber = serviceTagList(j) ' Extract warranty data for this serial (simplified extraction) Dim warrantyEndDate, serviceLevel, warrantyStatus warrantyEndDate = ExtractWarrantyData(responseText, serialNumber, "warrantyEndDate") serviceLevel = ExtractWarrantyData(responseText, serialNumber, "serviceLevel") warrantyStatus = ExtractWarrantyData(responseText, serialNumber, "warrantyStatus") If warrantyEndDate <> "" Then ' Update database - 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()" On Error Resume Next objConn.Execute strSQL If Err.Number = 0 Then updated = updated + 1 Else errors = errors + 1 Err.Clear End If On Error Goto 0 Else errors = errors + 1 End If Next Else errors = errors + (batchEnd - batchStart + 1) End If End If On Error Goto 0 Set xmlhttp = Nothing ' Small delay between batches - ASP doesn't support WScript.Sleep ' Instead, we'll just continue without delay since batches are small ' If batchEnd < total - 1 Then ' ' No sleep available in ASP ' End If Next ' Return response Response.Write "{""success"": true, ""total"": " & total & ", ""updated"": " & updated & ", ""errors"": " & errors & ", ""message"": ""Updated " & updated & " of " & total & " warranty records""}" objConn.Close ' Helper function to extract warranty data from JSON Function ExtractWarrantyData(jsonText, serviceTag, fieldName) Dim pattern, startPos, endPos, value pattern = """serviceTag"":""" & serviceTag & """" startPos = InStr(jsonText, pattern) If startPos > 0 Then ' Find the field within this warranty object Dim fieldPattern fieldPattern = """" & fieldName & """:""" startPos = InStr(startPos, jsonText, fieldPattern) If startPos > 0 Then startPos = startPos + Len(fieldPattern) endPos = InStr(startPos, jsonText, """") If endPos > startPos Then value = Mid(jsonText, startPos, endPos - startPos) ExtractWarrantyData = value Exit Function End If End If End If ExtractWarrantyData = "" End Function %>