diff --git a/.DS_Store b/.DS_Store index 9137885..b7889b0 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index c7ae8c0..fb0f8ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,8 @@ # Ignore any generated xlsx documents -*.xlsx \ No newline at end of file +*.xlsx + +# Ignore compiled binary +json2excel + +# Ignore test data +*.json \ No newline at end of file diff --git a/cmd/.DS_Store b/cmd/.DS_Store index de4918b..3dd2bda 100644 Binary files a/cmd/.DS_Store and b/cmd/.DS_Store differ diff --git a/main.go b/cmd/main/main.go similarity index 65% rename from main.go rename to cmd/main/main.go index 49dab05..45f90a8 100644 --- a/main.go +++ b/cmd/main/main.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "flag" "fmt" "log" "os" @@ -13,10 +14,27 @@ import ( // Initial concept from https://stackoverflow.com/q/68621039 func main() { - jsonFile := "test.json" + //jsonFile := "test.json" parentNode := "input" - sheetName := "Sheet2" - outputFilename := "test.xlsx" + //worksheetName := "Sheet2" + //outputFilename := "test.xlsx" + + // Command line arguments + var inputJson string + var worksheetName string + var outputFilename string + var boldTopRow bool + var freezeTopRow bool + var autoFilter bool + + // Process command line arguments + flag.StringVar(&inputJson, "inputJson", "./input.json", "Full path to input json data file") + flag.StringVar(&outputFilename, "outputFilename", "./output.xlsx", "Filename for excel worksheet output") + flag.StringVar(&worksheetName, "worksheetName", "Sheet1", "Label to set on worksheet") + flag.BoolVar(&boldTopRow, "bold-toprow", true, "Sets the top row of the worksheet to bold") + flag.BoolVar(&freezeTopRow, "freeze-toprow", true, "Freezes the first row of the Excel worksheet") + flag.BoolVar(&autoFilter, "autofilter", true, "Sets the auto filter on the first row") + flag.Parse() var xlsx *excelize.File var s []byte @@ -27,7 +45,7 @@ func main() { var cell string var row, column int - // TODO - truncate sheetName to the maximum 31 characters + // TODO - truncate worksheetName to the maximum 31 characters // Check if xlsx file exists already, and if it does then open and append data if fileExists(outputFilename) { @@ -35,23 +53,23 @@ func main() { xlsx, err = excelize.OpenFile(outputFilename) if err != nil { fmt.Println(err) - return + os.Exit(1) } // Since we have an existing workbook, check if the sheet we want to write to already exists sheetFound := false for index, name := range xlsx.GetSheetMap() { - if name == sheetName { - fmt.Printf("Found worksheet '%s' at index '%d'\n", sheetName, index) + if name == worksheetName { + fmt.Printf("Found worksheet '%s' at index '%d'\n", worksheetName, index) sheetFound = true } } if !sheetFound { // Create the sheet - fmt.Printf("Creating worksheet '%s'\n", sheetName) - sheetIndex, err = xlsx.NewSheet(sheetName) + fmt.Printf("Creating worksheet '%s'\n", worksheetName) + sheetIndex, err = xlsx.NewSheet(worksheetName) if err != nil { - fmt.Printf("Error creating worksheet '%s' : %s\n", sheetName, err) + fmt.Printf("Error creating worksheet '%s' : %s\n", worksheetName, err) } // Set active worksheet fmt.Printf("Setting active sheet to index %d", sheetIndex) @@ -64,26 +82,27 @@ func main() { xlsx = excelize.NewFile() // Rename the default Sheet1 to this worksheet name - if sheetName != "Sheet1" { - fmt.Printf("Renaming default worksheet to '%s'\n", sheetName) - err = xlsx.SetSheetName("Sheet1", sheetName) + if worksheetName != "Sheet1" { + fmt.Printf("Renaming default worksheet to '%s'\n", worksheetName) + err = xlsx.SetSheetName("Sheet1", worksheetName) if err != nil { - fmt.Printf("Error setting sheet name to '%s': %s\n", sheetName, err) + fmt.Printf("Error setting sheet name to '%s': %s\n", worksheetName, err) } } } // Read the json input file - if fileExists(jsonFile) { - s, err = os.ReadFile(jsonFile) + if fileExists(inputJson) { + s, err = os.ReadFile(inputJson) if err != nil { panic(err) } } else { - fmt.Printf("Input JSON file '%s' does not exist.\n", jsonFile) + fmt.Printf("Input JSON file '%s' does not exist.\n", inputJson) + os.Exit(1) } - // Read the json into an orderedmap to preserve the ordering of json structure + // Unmarshal the json into an orderedmap to preserve the ordering of json structure o := orderedmap.New() err = json.Unmarshal([]byte(s), &o) if err != nil { @@ -92,15 +111,15 @@ func main() { // Assume that our content is within the first top-level key topLevel := o.Keys() - fmt.Printf("topLevel: %v\n", topLevel) + fmt.Printf("Detected toplevel json key as: '%s'\n", topLevel[0]) parentNode = topLevel[0] // Get a reference to the top level node we specified earlier - // TODO - validate this key exists vislice, ok := o.Get(parentNode) if !ok { fmt.Printf("Missing key for multitype array") } + // Get an interface that we can work with to access the sub elements vslice := vislice.([]interface{}) // Get the keys for the first element so we know what the column names will be @@ -108,22 +127,70 @@ func main() { columnNames := columnMap.Keys() fmt.Printf("Creating excel workbook with following headings : '%v'\n", columnNames) - // Add the header row + // Set the style for the header values + // Just handling bold for now but we can do other styles too as per https://xuri.me/excelize/en/style.html#NewStyle + headerStyle, err2 := xlsx.NewStyle(&excelize.Style{ + Font: &excelize.Font{ + Bold: boldTopRow, + }, + }) + if err2 != nil { + fmt.Printf("Error generating header style : '%s'\n", err2) + } + row = 1 column = 1 + + // Set the style + err = xlsx.SetRowStyle(worksheetName, row, row, headerStyle) + if err != nil { + fmt.Printf("Error setting header style : '%s'\n", err) + } + + // Add the header row for i := 0; i < len(columnNames); i++ { cell, _ = excelize.CoordinatesToCellName(column, row) fmt.Printf("Setting cell %s to value %s\n", cell, columnNames[i]) - xlsx.SetCellValue(sheetName, cell, columnNames[i]) + xlsx.SetCellValue(worksheetName, cell, columnNames[i]) + //xlsx.SetCellStyle(worksheetName, cell, cell, headerStyle) column++ } + // Freeze top row if requested, see https://xuri.me/excelize/en/utils.html#SetPanes + if freezeTopRow { + err = xlsx.SetPanes(worksheetName, &excelize.Panes{ + Freeze: true, + Split: false, + XSplit: 0, + YSplit: 1, + TopLeftCell: "A2", + ActivePane: "bottomLeft", + Panes: []excelize.PaneOptions{ + {SQRef: "A2", ActiveCell: "A2", Pane: "bottomLeft"}, + }, + }) + if err != nil { + fmt.Printf("Error freezing top row : '%s'\n", err) + } + } + + // Handle autofilter + if autoFilter { + // cell is still a reference to the last cell in the header row + filterRange := "A1:" + cell + fmt.Printf("Setting autofilter to range '%s'\n", filterRange) + err = xlsx.AutoFilter(worksheetName, filterRange, nil) + if err != nil { + fmt.Printf("Error setting autofilter : '%s'\n", err) + } + } + + // Now process the remaining data in our json input // Set starting row for data row = 2 - fmt.Printf("Adding %d rows of data to spreadsheet.\n", len(vslice)) - // Iterate the whole slice to get the data and add to the worksheet + fmt.Printf("Adding %d rows of data to spreadsheet.\n", len(vslice)) for i, v := range vslice { // Print the contents each slice //fmt.Printf("'%d' : '%v'\n", i, v) @@ -145,7 +212,7 @@ func main() { e, _ := vmap.Get(k[j]) //fmt.Printf("Setting cell %s to value %v\n", cell, e) - xlsx.SetCellValue(sheetName, cell, e) + xlsx.SetCellValue(worksheetName, cell, e) // Move to the next column //asciiValue++ diff --git a/cmd/main/main.go.txt b/cmd/main/main.go.txt deleted file mode 100644 index cf06c1a..0000000 --- a/cmd/main/main.go.txt +++ /dev/null @@ -1,108 +0,0 @@ -package main - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "io/ioutil" - - "github.com/xuri/excelize/v2" -) - -// Initial concept from https://stackoverflow.com/q/68621039 - -var end = errors.New("invalid end of array or object") - -func main() { - file, err := ioutil.ReadFile("test.json") - if err != nil { - panic(err) - } - - testkey, err := objectKeys([]byte(file)) - fmt.Println(testkey, err) - return - - var data interface{} - json.Unmarshal(file, &data) // reading all json data - //fmt.Println(data) - t, ok := data.([]interface{}) // assertion Interface - _ = ok - //fmt.Printf("%[1]v %[1]T\n", t) //map[string]interface {} - - myMap := t[0] // aim here to get APP, Company and Category which will be the column name of Excel sheet - fmt.Printf("myMap: %v\n", myMap) - columnData, _ := myMap.(map[string]interface{}) // extract the underlying concrete data from interface - fmt.Printf("columnData: %v\n", columnData) - keys := make([]string, 0, len(columnData)) // creating and initializing slice to store column - for k := range columnData { - fmt.Printf("%[1]v %[1]T\n", k) - keys = append(keys, k) - } - - return - - xlsx := excelize.NewFile() - sheetName := "Sheet1" - xlsx.SetSheetName(xlsx.GetSheetName(1), sheetName) - c := 'A' - asciiValue := int(c) - var a string - for i := 0; i < len(keys); i++ { - a = string(asciiValue) - xlsx.SetCellValue(sheetName, a+"1", keys[i]) - asciiValue++ - } - err = xlsx.SaveAs("./Onkar.xlsx") - if err != nil { - fmt.Println(err) - return - } - fmt.Println("Excel file generated sucessfully") -} - -func objectKeys(b []byte) ([]string, error) { - d := json.NewDecoder(bytes.NewReader(b)) - t, err := d.Token() - if err != nil { - return nil, err - } - if t != json.Delim('{') { - return nil, errors.New("expected start of object") - } - var keys []string - for { - t, err := d.Token() - if err != nil { - return nil, err - } - if t == json.Delim('}') { - return keys, nil - } - keys = append(keys, t.(string)) - if err := skipValue(d); err != nil { - return nil, err - } - } -} -func skipValue(d *json.Decoder) error { - t, err := d.Token() - if err != nil { - return err - } - switch t { - case json.Delim('['), json.Delim('{'): - for { - if err := skipValue(d); err != nil { - if err == end { - break - } - return err - } - } - case json.Delim(']'), json.Delim('}'): - return end - } - return nil -} diff --git a/internal/.DS_Store b/internal/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/internal/.DS_Store differ diff --git a/internal/ordered/go.mod.txt b/internal/ordered/go.mod.txt deleted file mode 100644 index 9d4c944..0000000 --- a/internal/ordered/go.mod.txt +++ /dev/null @@ -1,3 +0,0 @@ -module ordered - -go 1.19 \ No newline at end of file diff --git a/internal/ordered/ordered.go.txt b/internal/ordered/ordered.go.txt deleted file mode 100644 index 550c0e4..0000000 --- a/internal/ordered/ordered.go.txt +++ /dev/null @@ -1,267 +0,0 @@ -// Package ordered provided a type OrderedMap for use in JSON handling -// although JSON spec says the keys order of an object should not matter -// but sometimes when working with particular third-party proprietary code -// which has incorrect using the keys order, we have to maintain the object keys -// in the same order of incoming JSON object, this package is useful for these cases. -// -// Disclaimer: -// same as Go's default [map](https://blog.golang.org/go-maps-in-action), -// this OrderedMap is not safe for concurrent use, if need atomic access, may use a sync.Mutex to synchronize. -package ordered - -// Refers -// JSON and Go https://blog.golang.org/json-and-go -// Go-Ordered-JSON https://github.com/virtuald/go-ordered-json -// Python OrderedDict https://github.com/python/cpython/blob/2.7/Lib/collections.py#L38 -// port OrderedDict https://github.com/cevaris/ordered_map - -import ( - "bytes" - "container/list" - "encoding/json" - "fmt" - "io" -) - -// the key-value pair type, for initializing from a list of key-value pairs, or for looping entries in the same order -type KVPair struct { - Key string - Value interface{} -} - -type m map[string]interface{} - -// the OrderedMap type, has similar operations as the default map, but maintained -// the keys order of inserted; similar to map, all single key operations (Get/Set/Delete) runs at O(1). -type OrderedMap struct { - m - l *list.List - keys map[string]*list.Element // the double linked list for delete and lookup to be O(1) -} - -// Create a new OrderedMap -func NewOrderedMap() *OrderedMap { - return &OrderedMap{ - m: make(map[string]interface{}), - l: list.New(), - keys: make(map[string]*list.Element), - } -} - -// Create a new OrderedMap and populate from a list of key-value pairs -func NewOrderedMapFromKVPairs(pairs []*KVPair) *OrderedMap { - om := NewOrderedMap() - for _, pair := range pairs { - om.Set(pair.Key, pair.Value) - } - return om -} - -// return all keys -// func (om *OrderedMap) Keys() []string { return om.keys } - -// set value for particular key, this will remember the order of keys inserted -// but if the key already exists, the order is not updated. -func (om *OrderedMap) Set(key string, value interface{}) { - if _, ok := om.m[key]; !ok { - om.keys[key] = om.l.PushBack(key) - } - om.m[key] = value -} - -// Check if value exists -func (om *OrderedMap) Has(key string) bool { - _, ok := om.m[key] - return ok -} - -// Get value for particular key, or nil if not exist; but don't rely on nil for non-exist; should check by Has or GetValue -func (om *OrderedMap) Get(key string) interface{} { - return om.m[key] -} - -// Get value and exists together -func (om *OrderedMap) GetValue(key string) (value interface{}, ok bool) { - value, ok = om.m[key] - return -} - -// deletes the element with the specified key (m[key]) from the map. If there is no such element, this is a no-op. -func (om *OrderedMap) Delete(key string) (value interface{}, ok bool) { - value, ok = om.m[key] - if ok { - om.l.Remove(om.keys[key]) - delete(om.keys, key) - delete(om.m, key) - } - return -} - -// Iterate all key/value pairs in the same order of object constructed -func (om *OrderedMap) EntriesIter() func() (*KVPair, bool) { - e := om.l.Front() - return func() (*KVPair, bool) { - if e != nil { - key := e.Value.(string) - e = e.Next() - return &KVPair{key, om.m[key]}, true - } - return nil, false - } -} - -// Iterate all key/value pairs in the reverse order of object constructed -func (om *OrderedMap) EntriesReverseIter() func() (*KVPair, bool) { - e := om.l.Back() - return func() (*KVPair, bool) { - if e != nil { - key := e.Value.(string) - e = e.Prev() - return &KVPair{key, om.m[key]}, true - } - return nil, false - } -} - -// this implements type json.Marshaler interface, so can be called in json.Marshal(om) -func (om *OrderedMap) MarshalJSON() (res []byte, err error) { - res = append(res, '{') - front, back := om.l.Front(), om.l.Back() - for e := front; e != nil; e = e.Next() { - k := e.Value.(string) - res = append(res, fmt.Sprintf("%q:", k)...) - var b []byte - b, err = json.Marshal(om.m[k]) - if err != nil { - return - } - res = append(res, b...) - if e != back { - res = append(res, ',') - } - } - res = append(res, '}') - // fmt.Printf("marshalled: %v: %#v\n", res, res) - return -} - -// this implements type json.Unmarshaler interface, so can be called in json.Unmarshal(data, om) -func (om *OrderedMap) UnmarshalJSON(data []byte) error { - dec := json.NewDecoder(bytes.NewReader(data)) - dec.UseNumber() - - // must open with a delim token '{' - t, err := dec.Token() - if err != nil { - return err - } - if delim, ok := t.(json.Delim); !ok || delim != '{' { - return fmt.Errorf("expect JSON object open with '{'") - } - - err = om.parseobject(dec) - if err != nil { - return err - } - - t, err = dec.Token() - if err != io.EOF { - return fmt.Errorf("expect end of JSON object but got more token: %T: %v or err: %v", t, t, err) - } - - return nil -} - -func (om *OrderedMap) parseobject(dec *json.Decoder) (err error) { - var t json.Token - for dec.More() { - t, err = dec.Token() - if err != nil { - return err - } - - key, ok := t.(string) - if !ok { - return fmt.Errorf("expecting JSON key should be always a string: %T: %v", t, t) - } - - t, err = dec.Token() - if err == io.EOF { - break - } else if err != nil { - return err - } - - var value interface{} - value, err = handledelim(t, dec) - if err != nil { - return err - } - - // om.keys = append(om.keys, key) - om.keys[key] = om.l.PushBack(key) - om.m[key] = value - } - - t, err = dec.Token() - if err != nil { - return err - } - if delim, ok := t.(json.Delim); !ok || delim != '}' { - return fmt.Errorf("expect JSON object close with '}'") - } - - return nil -} - -func parsearray(dec *json.Decoder) (arr []interface{}, err error) { - var t json.Token - arr = make([]interface{}, 0) - for dec.More() { - t, err = dec.Token() - if err != nil { - return - } - - var value interface{} - value, err = handledelim(t, dec) - if err != nil { - return - } - arr = append(arr, value) - } - t, err = dec.Token() - if err != nil { - return - } - if delim, ok := t.(json.Delim); !ok || delim != ']' { - err = fmt.Errorf("expect JSON array close with ']'") - return - } - - return -} - -func handledelim(t json.Token, dec *json.Decoder) (res interface{}, err error) { - if delim, ok := t.(json.Delim); ok { - switch delim { - case '{': - om2 := NewOrderedMap() - err = om2.parseobject(dec) - if err != nil { - return - } - return om2, nil - case '[': - var value []interface{} - value, err = parsearray(dec) - if err != nil { - return - } - return value, nil - default: - return nil, fmt.Errorf("Unexpected delimiter: %q", delim) - } - } - return t, nil -} diff --git a/json2excel b/json2excel index ca44565..6021ca8 100755 Binary files a/json2excel and b/json2excel differ diff --git a/test.json b/test.json deleted file mode 100644 index 51ae5c7..0000000 --- a/test.json +++ /dev/null @@ -1,1273 +0,0 @@ -{ - "input": [ - { - "CertExpiry": "2026-10-20T02:02:35Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006111.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:04:16Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006112.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:04:54Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006113.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:03:20Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006114.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:05:22Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006115.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:06:24Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006116.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:06:52Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006117.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:07:15Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006118.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:07:39Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006119.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:10:01Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006120.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:14:12Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006121.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:15:40Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006122.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:16:02Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006123.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-19T23:55:04Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006124.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T01:12:20Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006125.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T00:29:41Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006126.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T00:29:45Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006127.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T00:30:08Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006128.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T00:30:06Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006129.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T00:30:22Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006130.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T00:30:26Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006131.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T00:30:44Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006132.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T00:30:53Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006133.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-20T02:34:16Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006134.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:03Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006135.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:14Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006136.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:16Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006137.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:18Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006138.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:22Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006139.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:26Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006140.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:26Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006141.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:21Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006142.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:25Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006143.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:24Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006144.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:17Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006145.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:01Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006146.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:03Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006147.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:58:24Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006148.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:58:44Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006149.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:15Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006150.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:58:33Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006151.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T02:01:18Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006152.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:01Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006153.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:18Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006154.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:23Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006155.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:34Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006156.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:58:28Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006157.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:23Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006158.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:23Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006159.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:16Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006160.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:14Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006161.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:25Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006162.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:58:57Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006163.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T02:38:05Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006164.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:30Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006165.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:15Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006166.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:27Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006167.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:44Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006168.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:30Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006169.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:13Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006170.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:39Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006171.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:05Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006172.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:28Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006173.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:34Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006174.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T02:38:49Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006175.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:24Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006176.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:06Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006177.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:42Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006178.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:58:50Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006179.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:24Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006180.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:31Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006181.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:32Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006182.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:58:50Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006183.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:19Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006184.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:34Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006185.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-05-09T01:59:45Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006186.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-08-10T11:58:52Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006187.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-08-10T11:59:21Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006188.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-08-30T13:49:02Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006189.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-08T05:27:16Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006211.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-23T01:28:29Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006212.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-25T05:07:42Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006213.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-25T07:05:53Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006214.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-25T05:27:52Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006215.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-25T05:29:09Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006216.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T01:33:53Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006217.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T03:09:36Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006218.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T06:07:31Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006219.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T03:51:23Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006220.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T03:53:26Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006221.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T03:52:22Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006222.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-18T08:21:51Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006223.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-18T08:24:57Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006224.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-18T13:48:46Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006233.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-18T13:48:54Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006234.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-18T13:48:33Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006235.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-18T13:49:01Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006236.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-18T13:48:58Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006237.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-18T13:48:21Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006238.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T06:35:45Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006239.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T06:38:02Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006240.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-28T04:56:13Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006241.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T06:35:07Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006242.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-18T06:37:43Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006243.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-20T04:27:58Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006244.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-20T04:28:58Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006245.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-12-20T04:28:43Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006246.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-25T07:44:52Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006247.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-25T07:07:18Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006248.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-25T07:07:40Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006249.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-11-25T07:06:58Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006250.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-17T01:29:24Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006257.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-20T07:36:35Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006258.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-20T07:18:26Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006259.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-20T07:47:11Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006260.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-20T07:48:57Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006261.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-20T07:57:52Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600006262.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:27Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007900.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:27Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007901.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:26Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007902.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:27Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007903.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:27Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007904.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:26Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007905.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:26Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007906.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:27Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007907.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:27Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007908.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-02-02T01:32:27Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600007909.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-03T04:43:19Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600008011.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-03T04:47:35Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600008012.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-03T04:51:48Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600008013.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-03T04:55:58Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600008014.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2026-10-03T04:38:05Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600008015.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-07-27T06:26:28Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600008016.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-07-27T06:26:33Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600008017.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-23T04:13:44Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600008018.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2028-01-23T03:59:18Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600008019.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-07-03T23:57:26Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600009011.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-07-04T00:04:19Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600009012.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-07-04T00:09:48Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600009013.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-07-04T00:15:20Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600009014.esau.wbcau.westpac.com.au" - }, - { - "CertExpiry": "2027-07-04T00:20:40Z", - "CertRenewed": false, - "CertStatus": "good", - "TaskError": "", - "TaskResult": "", - "TaskState": "", - "VMHost": "pev210600009015.esau.wbcau.westpac.com.au" - } -] -} \ No newline at end of file