github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/cmd/list-alarms/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", 500, "Max number of returned alarms") 29 start = flag.Int("start", 0, "Index of first event (offset)") 30 withcount = flag.Bool("withcount", true, "???") 31 archived = flag.Bool("archived", false, "Archived Alerts") 32 unknown = flag.Bool("listUnknown", false, "Print unknown events in raw format (helps for adding them)") 33 ) 34 35 func main() { 36 w := new(tabwriter.Writer) 37 w.Init(os.Stdout, 0, 8, 3, ' ', 0) 38 defer w.Flush() 39 40 flag.Parse() 41 42 u, err := unifi.Login(*user, *pass, *host, *port, *siteID, *version) 43 if err != nil { 44 log.Fatalln("Login returned error: ", err) 45 return 46 } 47 defer u.Logout() 48 49 site, err := u.Site(*siteID) 50 if err != nil { 51 log.Fatal(err) 52 } 53 54 var alarmFilter unifi.AlarmFilter 55 alarmFilter.Limit = *limit 56 alarmFilter.Start = *start 57 alarmFilter.Withcount = *withcount 58 alarmFilter.Archived = *archived 59 60 // Print basic events 61 62 if !*unknown { 63 64 be, err := u.BasicAlarms(site, alarmFilter) 65 if err != nil { 66 log.Fatalln(err) 67 return 68 } 69 70 fmt.Fprintf(w, "\n\nTimestamp\tId\tKey\tMessage\tArchived\tHandledAdminID\tHandleTime\n") 71 72 for _, e := range be { 73 74 timestamp := time.Unix(0, e.Time*int64(time.Millisecond)) 75 76 if e.Archived == nil || !*(e.Archived) { 77 fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%t\tNot available\tNot Available\n", timestamp.String(), e.ID, e.Key, e.Message, *(e.Archived)) 78 } else { 79 fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%t\t%s\t%s\n", timestamp.String(), e.ID, e.Key, e.Message, *(e.Archived), e.HandledAdminID, e.HandledTime.Format("2006-01-02 15:04:05")) 80 } 81 } 82 } else { 83 84 // Print unknown events in json format 85 86 fmt.Fprintf(w, "\n\nUnknown Events\n") 87 88 re, err := u.RawAlarms(site, alarmFilter) 89 if err != nil { 90 log.Fatalln(err) 91 return 92 } 93 94 totalEvents := 0 95 unknownEvents := 0 96 97 for _, e := range re { 98 switch e.Key { 99 case "EVT_AD_Login": 100 case "EVT_AP_DetectRogueAP": 101 case "EVT_LU_Connected": 102 case "EVT_LU_Disconnected": 103 case "EVT_WU_Connected": 104 case "EVT_WU_Disconnected": 105 case "EVT_WU_Roam": 106 case "EVT_WU_RoamRadio": 107 case "EVT_AP_Connected": 108 case "EVT_SW_Connected": 109 case "EVT_AP_Isolated": 110 case "EVT_AP_DiscoveredPending": 111 case "EVT_AP_Adopted": 112 case "EVT_AP_UpgradeScheduled": 113 case "EVT_AP_Upgraded": 114 case "EVT_AP_RestartedUnknown": 115 case "EVT_SW_DiscoveredPending": 116 case "EVT_SW_Adopted": 117 case "EVT_SW_UpgradeScheduled": 118 case "EVT_SW_Upgraded": 119 case "EVT_AP_Restarted": 120 case "EVT_AP_PossibleInterference": 121 case "EVT_SW_PoeDisconnect": 122 case "EVT_AP_Lost_Contact": 123 case "EVT_SW_RestartedUnknown": 124 case "EVT_SW_Lost_Contact": 125 126 default: 127 j, err := json.Marshal(&e.Data) 128 if err != nil { 129 panic(err) 130 } 131 fmt.Fprintln(w, string(j)) 132 unknownEvents++ 133 } 134 totalEvents++ 135 } 136 137 fmt.Fprintf(w, "Total Events: %d\n", totalEvents) 138 fmt.Fprintf(w, "Unknown Events: %d\n", unknownEvents) 139 140 } 141 /* // Events in raw format 142 fmt.Fprintln(w, "Timestamp\tId\tKey\tMessage") 143 144 for _, re := range events { 145 146 if *key == "" || *key == re.Key { 147 timestamp := time.Unix(0, re.Timestamp*int64(time.Millisecond)) 148 fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", timestamp.String(), re.ID, re.Key, re.Message) 149 } 150 } 151 */ 152 // Parsed Events 153 154 /* 155 156 // EVT_AP_Lost_Contact 157 fmt.Fprintln(w, "") 158 fmt.Fprintln(w, "--- EVT_AP_Lost_Contact ---") 159 fmt.Fprintln(w, "Timestamp\tId\tSubsystem\tSiteID\tAp\tApName\tPort\tMessage") 160 161 for _, re := range events { 162 163 switch re.Key { 164 case "EVT_AP_Lost_Contact": 165 166 var e unifi.EVT_AP_Lost_Contact 167 err := json.Unmarshal(re.RawEvent, &e) 168 if err == nil { 169 timestamp := time.Unix(0, e.Time*int64(time.Millisecond)) 170 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) 171 } 172 } 173 } 174 175 // EVT_SW_PoeDisconnect controller version 5.8.21+ / USW firmware 3.9.27+ 176 fmt.Fprintln(w, "") 177 fmt.Fprintln(w, "--- EVT_SW_PoeDisconnect ---") 178 fmt.Fprintln(w, "Timestamp\tId\tSubsystem\tSiteID\tSwitch\tSwitchName\tPort\tMessage") 179 180 for _, re := range events { 181 182 switch re.Key { 183 case "EVT_SW_PoeDisconnect": 184 185 var e unifi.EVT_SW_PoeDisconnect 186 err := json.Unmarshal(re.RawEvent, &e) 187 if err == nil { 188 timestamp := time.Unix(0, e.Time*int64(time.Millisecond)) 189 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) 190 } 191 } 192 } 193 */ 194 }