github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/cmd/list-events/main.go (about) 1 // Copyright (c) 2014 Dimitri Sokolyuk. All rights reserved. 2 // Use of this source code is governed by ISC-style license 3 // that can be found in the LICENSE file. 4 5 // Example command list-events 6 // List Events of a given site 7 package main 8 9 import ( 10 "encoding/json" 11 "flag" 12 "fmt" 13 "log" 14 "os" 15 "text/tabwriter" 16 "time" 17 18 "github.com/dim13/unifi" 19 ) 20 21 var ( 22 host = flag.String("host", "unifi", "Controller hostname") 23 user = flag.String("user", "admin", "Controller username") 24 pass = flag.String("pass", "unifi", "Controller password") 25 version = flag.Int("version", 5, "Controller base version") 26 port = flag.String("port", "8443", "Controller port") 27 siteID = flag.String("siteid", "default", "Sitename or description") 28 limit = flag.Int("limit", 3000, "Max number of returned events") 29 start = flag.Int("start", 0, "Index of first event (offset)") 30 within = flag.Int("within", 4320, "Number of hours back") 31 unknown = flag.Bool("listUnknown", false, "Print unknown events in raw format (helps for adding them)") 32 ) 33 34 //{"_limit":500,"_start":0,"_withcount":true,"archived":false} // Alarms 35 36 func main() { 37 w := new(tabwriter.Writer) 38 w.Init(os.Stdout, 0, 8, 3, ' ', 0) 39 defer w.Flush() 40 41 flag.Parse() 42 43 u, err := unifi.Login(*user, *pass, *host, *port, *siteID, *version) 44 if err != nil { 45 log.Fatalln("Login returned error: ", err) 46 return 47 } 48 defer u.Logout() 49 50 site, err := u.Site(*siteID) 51 if err != nil { 52 log.Fatal(err) 53 } 54 55 var eventFilter unifi.EventFilter 56 eventFilter.Limit = *limit 57 eventFilter.Start = *start 58 59 eventFilter.Within = *within 60 61 // Print basic events 62 63 if !*unknown { 64 65 be, err := u.BasicEvents(site, eventFilter) 66 if err != nil { 67 log.Fatalln(err) 68 return 69 } 70 71 fmt.Fprintln(w, "Timestamp\tId\tKey\tMessage") 72 73 for _, e := range be { 74 75 timestamp := time.Unix(0, e.Time*int64(time.Millisecond)) 76 fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", timestamp.String(), e.ID, e.Key, e.Message) 77 78 } 79 } else { 80 81 // Print unknown events in json format 82 83 fmt.Fprintf(w, "\n\nUnknown Events\n") 84 85 re, err := u.RawEvents(site, eventFilter) 86 if err != nil { 87 log.Fatalln(err) 88 return 89 } 90 91 totalEvents := 0 92 unknownEvents := 0 93 94 for _, e := range re { 95 switch e.Key { 96 case "EVT_AD_Login": 97 case "EVT_AP_Adopted": 98 case "EVT_AP_Connected": 99 case "EVT_AP_DetectRogueAP": 100 case "EVT_AP_DiscoveredPending": 101 case "EVT_AP_Isolated": 102 case "EVT_AP_Lost_Contact": 103 case "EVT_AP_PossibleInterference": 104 case "EVT_AP_Restarted": 105 case "EVT_AP_RestartedUnknown": 106 case "EVT_AP_Upgraded": 107 case "EVT_AP_UpgradeScheduled": 108 case "EVT_LU_Connected": 109 case "EVT_LU_Disconnected": 110 case "EVT_SW_Adopted": 111 case "EVT_SW_Connected": 112 case "EVT_SW_DiscoveredPending": 113 case "EVT_SW_Lost_Contact": 114 case "EVT_SW_PoeDisconnect": 115 case "EVT_SW_RestartedUnknown": 116 case "EVT_SW_Upgraded": 117 case "EVT_SW_UpgradeScheduled": 118 case "EVT_WU_Connected": 119 case "EVT_WU_Disconnected": 120 case "EVT_WU_Roam": 121 case "EVT_WU_RoamRadio": 122 123 default: 124 j, err := json.Marshal(&e.Data) 125 if err != nil { 126 panic(err) 127 } 128 fmt.Fprintln(w, string(j)) 129 unknownEvents++ 130 } 131 totalEvents++ 132 } 133 134 fmt.Fprintf(w, "Total Events: %d\n", totalEvents) 135 fmt.Fprintf(w, "Unknown Events: %d\n", unknownEvents) 136 137 } 138 /* // Events in raw format 139 fmt.Fprintln(w, "Timestamp\tId\tKey\tMessage") 140 141 for _, re := range events { 142 143 if *key == "" || *key == re.Key { 144 timestamp := time.Unix(0, re.Timestamp*int64(time.Millisecond)) 145 fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", timestamp.String(), re.ID, re.Key, re.Message) 146 } 147 } 148 */ 149 // Parsed Events 150 151 /* 152 153 // EVT_AP_Lost_Contact 154 fmt.Fprintln(w, "") 155 fmt.Fprintln(w, "--- EVT_AP_Lost_Contact ---") 156 fmt.Fprintln(w, "Timestamp\tId\tSubsystem\tSiteID\tAp\tApName\tPort\tMessage") 157 158 for _, re := range events { 159 160 switch re.Key { 161 case "EVT_AP_Lost_Contact": 162 163 var e unifi.EVT_AP_Lost_Contact 164 err := json.Unmarshal(re.RawEvent, &e) 165 if err == nil { 166 timestamp := time.Unix(0, e.Time*int64(time.Millisecond)) 167 fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%s\n", timestamp.String(), e.ID, e.Subsystem, e.SiteID, e.Ap, e.ApName, e.Msg) 168 } 169 } 170 } 171 172 // EVT_SW_PoeDisconnect controller version 5.8.21+ / USW firmware 3.9.27+ 173 fmt.Fprintln(w, "") 174 fmt.Fprintln(w, "--- EVT_SW_PoeDisconnect ---") 175 fmt.Fprintln(w, "Timestamp\tId\tSubsystem\tSiteID\tSwitch\tSwitchName\tPort\tMessage") 176 177 for _, re := range events { 178 179 switch re.Key { 180 case "EVT_SW_PoeDisconnect": 181 182 var e unifi.EVT_SW_PoeDisconnect 183 err := json.Unmarshal(re.RawEvent, &e) 184 if err == nil { 185 timestamp := time.Unix(0, e.Time*int64(time.Millisecond)) 186 fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%d\t%s\n", timestamp.String(), e.ID, e.Subsystem, e.SiteID, e.Sw, e.SwName, e.Port, e.Msg) 187 } 188 } 189 } 190 */ 191 }