From 556c536c26520d7f7ce7b4c383f5f00586b7f350 Mon Sep 17 00:00:00 2001 From: JTSage Date: Sun, 7 Oct 2018 17:07:33 -0400 Subject: [PATCH] Add a plugin for unifi (Ubiquity) gear Plugins available: * unifi_api - Providing the following graphs: * unifi_clients_by_device - Count the number of clients connected on a per-device basis * unifi_clients_by_network - Count the number of clients connected to each named network * unifi_device_stats - Get basic stats from each unifi device - cpu, memory, load average, and uptime * unifi_xfer_by_device - Transfer stats on a per-device basis * unifi_xfer_by_network - Transfer stats on a per-network basis * unifi_xfer_by_port - Transfer stats per switch port * unifi_xfer_by_uplink - Overall transfer with speedtest stats --- .../unifi_api-clients_by_device-detail.png | Bin 0 -> 20064 bytes .../unifi_api-clients_by_device.png | Bin 0 -> 14774 bytes .../unifi_api-clients_by_type-detail.png | Bin 0 -> 16910 bytes .../unifi_api-clients_by_type.png | Bin 0 -> 15023 bytes .../example-graphs/unifi_api-device_cpu.png | Bin 0 -> 14120 bytes .../example-graphs/unifi_api-device_load.png | Bin 0 -> 30221 bytes .../example-graphs/unifi_api-device_mem.png | Bin 0 -> 9708 bytes .../unifi_api-device_uptime.png | Bin 0 -> 8186 bytes .../unifi_api-xfer_by_device-detail.png | Bin 0 -> 20516 bytes .../unifi_api-xfer_by_device.png | Bin 0 -> 20617 bytes .../unifi_api-xfer_by_network-detail.png | Bin 0 -> 21722 bytes .../unifi_api-xfer_by_network.png | Bin 0 -> 13808 bytes .../unifi_api-xfer_by_port-detail.png | Bin 0 -> 17337 bytes .../example-graphs/unifi_api-xfer_by_port.png | Bin 0 -> 32029 bytes .../unifi_api-xfer_by_radio-detail.png | Bin 0 -> 27335 bytes .../unifi_api-xfer_by_radio.png | Bin 0 -> 14718 bytes .../unifi_api-xfer_by_uplink.png | Bin 0 -> 12183 bytes plugins/ubiquiti/unifi_api | 1212 +++++++++++++++++ 18 files changed, 1212 insertions(+) create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-clients_by_device-detail.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-clients_by_device.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-clients_by_type-detail.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-clients_by_type.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-device_cpu.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-device_load.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-device_mem.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-device_uptime.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-xfer_by_device-detail.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-xfer_by_device.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-xfer_by_network-detail.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-xfer_by_network.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-xfer_by_port-detail.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-xfer_by_port.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-xfer_by_radio-detail.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-xfer_by_radio.png create mode 100644 plugins/ubiquiti/example-graphs/unifi_api-xfer_by_uplink.png create mode 100755 plugins/ubiquiti/unifi_api diff --git a/plugins/ubiquiti/example-graphs/unifi_api-clients_by_device-detail.png b/plugins/ubiquiti/example-graphs/unifi_api-clients_by_device-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..7e3d44a5f460245e4ced11056a275b2225438bbd GIT binary patch literal 20064 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 literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-clients_by_device.png b/plugins/ubiquiti/example-graphs/unifi_api-clients_by_device.png new file mode 100644 index 0000000000000000000000000000000000000000..4ac539f7c788164b96e6b48ffc6ac0a1b17252b7 GIT binary patch literal 14774 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 Y8g1uu8y1=kgaJMz#AHQFKk54XUv_Yn;s5{u literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-clients_by_type.png b/plugins/ubiquiti/example-graphs/unifi_api-clients_by_type.png new file mode 100644 index 0000000000000000000000000000000000000000..8d74aaf019677a27732088107f9470826d398536 GIT binary patch literal 15023 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 M8D;4zNu$931x?mK5&!@I literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-device_cpu.png b/plugins/ubiquiti/example-graphs/unifi_api-device_cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..0e5e7ef215be35af3268ad526aa8be9dfd5597c5 GIT binary patch literal 14120 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 literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-device_load.png b/plugins/ubiquiti/example-graphs/unifi_api-device_load.png new file mode 100644 index 0000000000000000000000000000000000000000..ebecac8cc84d6a528267eb210381bd55886fd01f GIT binary patch literal 30221 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 J6(UAI{}1yp_BsFn literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-device_mem.png b/plugins/ubiquiti/example-graphs/unifi_api-device_mem.png new file mode 100644 index 0000000000000000000000000000000000000000..c6fc0073c1603f2ae404119b9e82fd0d0d5315e1 GIT binary patch literal 9708 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

_vS%_o4m9DjR{`6{Bb__Yry}8R(RGM(GX78-e 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 T`g!%b7J;IynhZ?ZDB%AAGkfSU literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-device_uptime.png b/plugins/ubiquiti/example-graphs/unifi_api-device_uptime.png new file mode 100644 index 0000000000000000000000000000000000000000..92e22c9ab9c34dfbc5aec16314da752b15a3fbeb GIT binary patch literal 8186 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 literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_device-detail.png b/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_device-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffb1594bc30b04e5028d4e3e1a41f75f2369292 GIT binary patch literal 20516 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 literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_device.png b/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_device.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b1cd4d90d1ff0c8505902c4a4e00c80aabafea GIT binary patch literal 20617 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 literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_network-detail.png b/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_network-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..33f77e6e8c18805a0fc6b21cb79abcb666bce313 GIT binary patch literal 21722 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 literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_network.png b/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_network.png new file mode 100644 index 0000000000000000000000000000000000000000..af71a0dedd3cf2303bbd5fe80cd5e0777f87ef0f GIT binary patch literal 13808 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 literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_port.png b/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_port.png new file mode 100644 index 0000000000000000000000000000000000000000..570f625c6dffb7c3a239b513f0933a658da5229b GIT binary patch literal 32029 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νKN-BdNwEBy zC*d+}DepagG3sa54%n(ZS9}k$%nMVR!Mif^7FSx@Bn?ryoFWvRDHEtpn&s~fiqpKa zc9}8bjNPCu*q0O^+)Ij81Q|8FW;+w^e9?XHHGKM;o6+-Q28Y8|Cx8^q7)u&-Yeh*GESpEiAdeBYrcARX%dv_NiO`{$4~k8DRk! zG-sanl_-E)(KPnWsJ2fBeB5EB{TXm|RZ_1rOkPSI>dxF{s^j?No=&4o)L&0NmsY%s z>j;1F8(GkS(*g?&9*XdTX#&^M@xNh9q7l}5Y1{*cf+(-w#L#ROA|ojwFyMn!+{CZ% zI%EfPVy=oM_*|9Xo44_1lfe^{ftEl6H>^WHF1cGQR&&gs2gNFwhHkzl>A zZ-VpxrbQ22<^2ch9{nB}MTSeyV17W5N^9fm%mnePAX$LmrvYyx5kebv8QKWxV>M_t zVhOHJz4@6IC};4@-JAh>;LcQHp`6n^3_bXl(>)Du!k$9F@>&%Z=vahT+lh8(*0TN_ zvxzvoh+?9v45p3n-N;ekxAyiC)BE9xjc*92IvH;qZt|~I*PE#&uL&!r#*IiGbs`?U zA9n;DPPew@FL!x;3GjOgfSn^~50=!csPkCP$$@gX2S&FlaR7?o1Hqf6PC5GpUB)cseR%)Gt5C0>sC;>Bw%4?cUK=F3M2L4a zd5a4#hstnN#AoSTT(t!hiaOUyE*VF0n`T-Fakempg@ya`@v><6>1D3b^&o=?rF$ZU z!Mn`Y?*HJ2JU8~~f^@#Hz~Zw+G`jyz1#KE9v`mIRGP>;e6qtI8-(PO(sro)gx_o{J zTsSDs?XQpSjUH`f{$eUW?}<2IY!#C&)%milGV^5__k{_`F!C#%{`&kgC}n+PvZ6d) zb@XQ{zj_|+r_^29k&RxzA@xV%l~aumc#2qKj*MYYed$+-a;P+3#rlw%!nK{%jFZRj zIx1UJCJUh<{;TWb<5_?|q`n6!>iCmtO7e-e{X;B$82ApL?qM%sh&b|iuAM<3ic+&e zG?hX7R74;Ezp@SrI{%k_rnWu?vNfc*U2=$Sx*nQJ7oW}CC+&`;3|#D`5yv!m-@(s z%QW);qy9qHe4wTEj1ve;9xJ}N+t;upQ!>+^D-gg~IrUoR$C_35VPWi$SX<*LeMG>vKbMHZ zONqdiDi82Fsx`CW%)L863fpg6Q!`ri$zt5Xls`!eFI;$lDdM5aCU1<0A2}3U`InMW zDSXmOXzQnignM~uC+NW=Mf;8CX!!5D* zOh82LWJ7N0xhxBO^EnW2x_Bt|?TKm{)rt4`JXxi8x+|z&txmjqQR=B`D0R1()_9NH zz8In9*dZ4&;k~Ve_^Y>&ZOo9l|At5IcuAgV5Uz{Xmg?jL0HPLR|3Ol& z>tv1}6+PDRMmsB3otk=!{mw*m*~u-z!kR@E6_kuuq06S_$F;e!#m}trg1sykKCE$T zC_T_B2`w-ni3Pp~gO8dycQqAP(gD(;PN9w0PI%^ zt(2G1aroG8)f+2ImD1w3v=q4l#^K6$Z{@pX=l7xLC<7Uf`^`f$gfg4>yC@<&zd@Q8 znzhsm|FL|sjC$~Yb3s3;R8*=6dYUY7G;%AP^yCZt;{LL5Wd;X{aU(Z!c8rM^8RA~F zYx+OJy}e9Q47!c9xZX1?6_}O2N4SW>rs2QLT3i+CgL5TQ?(0kGZiwi0M}R4CQSY}r z)s=S)jfi)j7qmtXP4K@*AJ6HXK32Ni*^u|Vo#4_l{+Zzf0ds&hvh1ei_`od3oau57 zsyav0aKMmG3?pxd34sWqY<#;ZdEyTa$!7)=c6%*+*XB{)2(us~HOK#TnfdLx&@+R{ zuk(I@x!0GMo7@Xt&)li;T<&oWkPQ#zfDu)PRi@~-ePSTHt$kCU*Rrvn@{RM^(UwHg zzY%vM39ZOB1aSR!NtCS)6SW7x-QULi_M$STPFI(#85+Kon;Bm2xF1_pN!0^egNBkT z!oq7y9W!Ba%VoC+N(enUHV@Sl-%1B56)#ER$K4F8E#BS9%aHLyMX1k8>6^><(lVQZ z`+)LKEyq%To^KX*kngA6)%9ZjPbuPG*LhMUNCA=P-n))&=MK`uVTDou_;>7{3Nq8y z{!PH523`A@u^WB{Kl416H$#?)OpJ^eB0tDxht`e39(sOm90dgrAjfWndS$!%y`-}6 zXufG#4}IO}=XH2~HN6FS<}OA!=c$mDW74&bUO4-Z$ydTf<_sT3dKxy0@hY)uc5%$b zLhV%6_Klc>TbS61)y$!gVhXIDmjaGnzuFL&SM_|mQ5WvrCLlBD=?&_g?{btvA-Kx4 z`{p3{dHb1fO9a_$x39*JtDK9Ft+d$|Q?oki^(y!8e66feu3U(WSDdy>K9p(Qg9kp( zg;sp%uLo4OV#|EaX}=85)Gzz}IL%lceP8iSr|HbU_H=g@Gx#_#Qi6paFC=ZK30u#q zMGs#@r+lyxe4K-s)|3nySGfCGVWkR)mecnaN$2iPg#ivt(fgeD{izkQ>8dlzJ68k1 z;|k_Fis)7J<^AD3Ao|Mi(l?;_?ch96aP10tD9gjrdL&^YXxNSPxJ*ru&)oK?dYPaZ$g#KD0AI5-eN z0w~yHqDRUOzTw))sLJ5rlttaVFvA1C-*DAbl*K9Tqg?|><7lX8%VV+F>A52}H#clQ zv9+~zQc}|9=H~A1?(FRBL1QDf_r~Dh;PUcvOGHO|d;7%1#Ny(jy}f-cFf=|szOu4{ zoq38KAZuu77%eLc3JRK@p2jXXV-Ff@YipgHoYKwY9a?)P(l&@xjjOVb`MgagsI?60j4fwzf9xdc2E^3wG-(cK&5gPtW%DHU@*i zj*DSeL$H6Ix3;!=d3s?NJ+Rva*uz%rQ8#uo!_UtTJI4R=)EJt88asHjMiIQ7$~PuP~3XrbToE|0XulNr*Ua? zbQC+x?C#y?-Cj+}w;EX2<>=h;V9|pPz^I!J?v~ zTwPtUS7%?pe#P$n!0y+DgoMP##ugS9c6D{B&}VgYbR_w;IXgQqM@L(T7r%S=&fmNa zYFpvC=&3RN)Ogk;U?m_gFHesv|K*$=&nOS=Z@P~kKOPhsCgUc{PRLg0OsuZ1x@*>! zeID6b`@8nNDsnCIpemvxNo=l8bbA(Lv>@3=FV9nr-1WP!(u?!+%h?Wl%rC8+sDaI* zqS^q$AfwC-qHO-Z?PvVJ1F%S?pzJ79-BUyp6!qR zp#PjW!_etlKW&MA?so3d*%DWy4nds5Q~H36_W6SxIr%O<53StzpVOB!lVUFw40IKiwmP-8wg@c2{dGbg`+iP;uSjKTug}P6X zL{6EqG^A^iyoJy5iRd?tY;QeY<$@)=!5LShY5SS{ zn_d_Sg(vizpU%37+h!s3N+v3sh`xjjl@|{*b6qgSW7XAb#BOH}&&Y!aLao(5^KT4V zEaeD)8TK({W4M1pxxat7Y+X>-d63OE$kP!Vq{8y)V+6w-p!+8@b-(X7W#aAM1SA|( z1gf>vS{ai{N;#ZL@%Ya&PXNzPc^S<-lg{d;?F)EY3ht)#7)0 z)3_me!P4CFfnwjN>?kT>?D@%$N6i0a$la!21RjGw4x)&EJ9jElPE zOLRK4=TX63^S|b-s7?2G>zbZ#Yx=sg5ERLcOy;YG$hq$Z;x%$iGZsyg_y6{g*CO!z z==Fj74L?z}+?tK~*Oz}G=YMj@_3wQc(s2%g z*n3o()#bD2i0)TplEhfp$ zpTAzdN>?&xuJ}ymscqOHr!!{OLnX3VROUXz;bchd^~vhk_T&Dec%yO44Z)iDs;Ht+ zyyHDvN$+pTHI4=m^5Npf;Yd0Np&^3kq=Ml#gR)Z2D- zBSY}xXElYkNjJ~e-~Lgj$^F4m6!IXR(t_%9SmQhCIJfxNs4bj^&5hpf265}iNR5*3 ztn(q*MK&i5RPbW^mGPX>!Gi(wcIq6}Bq|36nnnm|Y@WAH`W$fAc~ckp=f-5YK<`(@ z=OzM*ov#x9#%imFiGSWd9WVboiL@}$6>amqVc{6{u=Vn%j~#6G`LWhle$5oM`F&N! z_kOGOd?t3`&$R$bN6ipv`a;F`Cz0bJ*<$n^say)t>;v?nq8%IW^VI;h6a-q8GqqxCM{bfzVFE=&g}x0B9BXTaE= zsy}r6%p$9h2X8%8vNGxMExdv(?zeabn|jT0f`l~EG{?qykx@w$!c${Xcpr@x^5(Rz zQStfM2SJ=GzNKf^-ova)oW1J~{E5A$)Yexmt7?Xd#pRQ3U%T9suLz#~8+wZ7n!VX`6+PRUG7bSn7y=F;sv zPZOG#?g7<%&u)IP_QB+=c;4uNz5zi@(~lqeAPcs_KA$L5`YOcoW+zisgjyEh&9K_^ zwwQwP)8?(6B0m(r%BVc@i>si&3;N-tb@Gnr0;yNV$i4-=9!gExhMg>PH1h+m38r+# zesNb~W70*&sF_Gx8BbS|Ri2NV6pG3`Dt4t-CC9w4r|V zAs&5>PbgD$laz{kzfd-$GZMv#f1M!8CaK85&yBb%a4IpNlW`ZfLSmP^@M`_7_?!7Y zs6NcLJ8BWg)}K@_fgCk8eSb>H;?QOUG^Z(l-8Lw<>xMZC0z@QXWOb9(iB312pi#X`0_d6XgU zVO3lpjPfx}jw*ZAc1QnmK2ZzFj>%l%TZ47eU(-fxV>c#UD!4~I@D>>He!o4FaN5Xb zqNkDoW#4x7;ImrgTl)z!!v{V>o-Rz};+k!nOb;AW5_(MHYy7LdXPqt~iG_+$@mm(~ zzxD5*gi9O8fjMdxnvSBkf0EkrY*cQRrImu@{RMSjAbxYyxsx7~v$20!#B0;x14|)F zN`y>3HBECDJluZzcHaC20VP8Im6~#>3sIZUGT{7C*9{{dnIX?qTRaZ9*(ao#i;n|^gOxDom-uL1`o`-Bk>{&?`i==SI?)N zDOZjAw)+2HV|i$|w@89zD95K|5+Loz1S2IK>VBseV=FZM6(=9C$Avb2ef#~}za#!Q z_B?Aa-I(1MH8kP&7!-3Iw5G~C!d{&pG}eo0TFJ+ZAc-zy(+nj3dSmc$aJ+CjBcfMi zACe9~rWf&`O#CZwK3ySgbNcen_QNQh6LZ&;7eq&-B+#K5@a|8 z7~n%sU>}Yb5^NYF`f9Y%svJlvj{09T#x)ZIT(=KCrn@y7yC@t}XHw$VRkFJ%u%T-t z28@b$Na?|?OdIs{_B$$_jL~z}(X%^O^VrM2>(yO7Ux=lq75X-f{#fJEN_C!2S#U2!4hWR>c3zBysIi$3WKRKxJ|-hw?tBHz*@ zmj9?hNO8fIG6bbE;HH!ylOQY2fc^6R=d8j*l-_k;sS+u%`%eu$R%`vutAou?KT6e9 zILAVPBUupTzd>%Q`{+-ONYZdCdcFR!gHtgt)0VyEuU}E9O^H%9DKcn!Xy{pBA_tiS z&s*2b$*N+8e|U5jfb#Mr2I~KmQMiZ3vo;?WTVugSwV8` zDtbf*R8Ego;f_}HKSEw(?h#dvg(lIayJri0qo`2vaD3}?EUd@M(y-Bj`xj-Gn%KwV z9)nA2R19l4zpKEQMvpi-MSWLO$r2j&!jq*(NY$nP(I*O!;PC)iT!BuA@jlLXQ%lAG z-MAn}9`pqL|Ec0PbnX+QvcmYwQJ69*tf47-g3OJ({M1b;0qOyD*B{sY; zi2psp3<=y@0`JD9iU)~hgB97M{NE8Ym>a#Y*uB;KB}rv`oP~v}Jnj`KFSiI3+M8UBaJGocKdk=_J)S(A00c2{+Xi5eJ zS-K9|L=V>tyg$>jW=N}XRD<|hiJ2)k{{AI^NPGnK;U$A!zXp;;dCJ5qnnihKX&$0c zg(RESRKI_tTXsT27h6Jphe3!dC(#bXD#}m_^_N5|Ed-A8Lih&urqcN47-~`8h}L`K zz+#JDRqb}v=jhf2y=N@n7@wt{-I46At-vK&0!uUB`H5$F{-=1=@w&_mv0HeiR z!$1%4LKxOpx4GRwSd)@yMfX_W6r40CAK+3Y5bp2Dtp_d5}6+W9fXKb2=L+svLALOPfXj477&cy8E8cjt9-d0pqym#9+6m#pPU@8pcZZ= z%6l0F>kNI;osw8zUr$~BTk{W^msmv$8aQseFxy6(IN#iX87FWx_3i^?HwryRElj&; zMELrymz$WV`8z;GU~bAmBN7R&n89*DSBnS%;tpwTywF616OljcaP*0gtD&i zRat6E;$cr{48IdQt3q|KAI2ze37_7YipS|F1#w>C(idnT4WqY)Tf&VbS(j_2A3S7$ z@!m?I{rkiO_57b%O1-H-&##N} z&U;%8R?Eii)m#8eyJ`imbaAiq2i4m_Tg}I+FrCLqy=;{C zwdy8l;|9Q2fMBu;K9-Cz(!{+Z2x1evc-?qv9 zJEQOYjCW}@sU7ve4y4Md^#J%l(WmkWD{36<+K>x@J`~y&09gs6J~A;GHt?leZAICU zOutPAVJ*3Pc(0}Z;+jgrcQOBFG}EI#)fvhNX4;xyKfSXbCFM^a7`LF5NiN92iS;Ma z<6+OMFX;5TXl<9)`|!l0MWaP|jK=I6x~L)vk9T|F{kZrB`YSwS&>H${7rk7OtzorZ zAbw><1@^_-nmzyl; zG}S*&3I5ZNTJW1H(OtS=2?`QokN-lVnAB*KZJaii;-Ggiq0_M=l-JR{h&1^hXGJNA zky7V}ISA+V$ZIb40g1-fIF5n2Vt z3QyVwu(NG7?ehUxE^+{~m#M^YON$%QDhOy7zXtgVV@ND8g+^TmH8tPvLy*V+QA3is zDL*)#R+QIK+RE2kSuH$Nl(+Yf$43e|H5DWLhUI9R=X9Xz!ad=>y|lKo>({xrgBFZA z-qPX(V>GH6zo89PK|<^Xri%&A4tD zzT6^k=YuIM$kqI+zHVtdeX%9+M{OU>y`&@bDJyH6q1&E$%$TiO&ljxODS&{QOt+$9 zNv8E%x!Bye+o!EI02Bj{PqU;#>CLz zUsnJ`UJ&rRUqPZB@u}W&eFH}`uAoXh@b7Lrjc}5NXb_*(=xQ7(W^O1t$HiCk0 z_iG8%ZzG>+#^Tp8$x=nM@d3Maga7y=NsK>z@6K?xFX4g{2Xf_e+}1^~q4 zP8yNg_G3o3VOuqoMR_LH<++65#uy5V+4TbYxM+$j4YlyXjsb_7yPy)o+Dtx;NIjRInDTyY$ z18z`d9t}EZcjUxjiNZHe_3%chv{MIvNirPopC%$_gfiV9Q=i;`_8J=JL3uSups=%7 zUrKSHTAgS{V(ku;Zqim)?<-;zW@s>v1|w8nO;t5gMXl$23JhxPU-)MwiUM7WE%jK* zg=1k*ONkV&t4|0;dDj)diyrA>HjV}wxhJGe%q2hlPJp_ zO^NVAw6MUPcEm~B7@#h?XoieW1Qd2c30s=Ic5Xg(6=Y#u{xM~^3?>+7ce#>edeA#+ zYT;!*=CXS{g?CTf+i3BrOX$SiNWM*W3gug5Wcrx@+T%&~gCDl_0KA~&@_y7F82(5z z!EP}(ft5tt0xsaDt|IbZ$?~u;onP8OD{o+<$ceSPP-{Ns4b5mT9Z&Y@YhXY-G*z}k zf@W?9jR$|NuW$(6wy^ z&&52vc)L*_D^Ygk=*M?xLHEy(9bZS!*VkzAlkH9E&a)!{m;9s8P&$!rT3cWE#d_W> zt)5{!ZC)QO+b4tcvTsoKpJHYAhXK2h%p8Mj0o4q9gK5t_25z*mmH96o;*^Wp(YVC* z?*Ig14UO;j@=^ldAqDt(U7qgKRd@PX$sB8~#yvcteA612Wh2#w#v=~TjeI-u0lZ)a z7z>!m@>37z9{_6LE57RT;XngCr4`j&c;IgOBMnGx=LIE0(?|K&h(bYJ!*0(#!?Omc zKp=vF%NcKcFkfjlqcTZUZZ^}g5!Jo2p*D9hze=3qJBNw#D(HG1T3{PTv0K5<-9J)f zDXE1&)K(BL{a1p+1$TAYHXp)Yw~^4&fZGSkyUuAR#2y*le}J!LuBL8aK3p%_maT@4 zd7t-jETiI=(HFZ>M+N8=%RncU>R?9?FBTr2z1jisFBYbGP` z`m8r-s1nrmyvYP@%>@=f-^9RaXBN)M#5l|_ocL`OwcE3Qo5Aj<$ANcVOUQGHUaP=K zUd+iJ8YNJnzK&pXAst;L`qy0zT%Lhg$)F?PlE2Ua#GBFsLI3!kp5v#FQoP4%{nxb( zd#&x-TI`{;!%$~v{#ip(3c}sRyl=W}gi=MBTBMz^-R&ebX@XAmXn_?9m0~MHNEq;)=lPc8i*djv~UoBKT-pcP2|1LXz zn+3*75(@SjtjHQ4IS@h}J&eFBQhX zT}oaU;3F0$R*zr%Foj}heBngeXN6{}<#qd>B7bw)x&OW1Su{J@cmQ?XzGg1Q>jPak zQ)(>2vuJ+uUbcr*XrL~5nm#m(`W08rw*G-x_VF#`vw8VP<&S`RB!w)=z32=UgL`D; zJ`=)^wF9YUDnHdpHypH{_#yiL4PcxO>t=n;ER4gH$(P1f{6&G>wIi#q?`zHBx*+PUFTF}5P?T4ZTAh}P{P8hh0fA(a#!=JBXZ+Zo zqXh)=;IBen27bV<}354Q?vI~pMBTKVqN1Yl5AX=)G{2c2;Ynh0L`4%!6l?}Xl! zi$ViRw5uQ8GVuB+L^Qrbg9CB>p;jUTcp%<_RkWE?1|Q7(LK9B>9=w8x*6Zq`1u3Gj zy}JGy(n^QG2l3q&*_9BJCeTWoF7Q+m9aw-}_bs*%tAFW~`3F&drRs0j&f8vTM<4|O z-V(lpJ`pdipaXf+t|Fx*BY2ZByy_wWm`BD$Ax4n=i6ESbVW;_5Vw z9HvG<5b)8>bbw{)|Nn!VmwG6a6{JRiiV(CI4nhs1@H*Qy#Gs3`nZ_qIPq{aXIj^UY z#SC7yK>%O1o(;kw+{Km-dSlC~qvuPWKcZ}O8Cey$MR}D7>&xF4#A49v4>;QaMiF%k zs!VF&*E}Ic0RgQ*dEjo*BkL&{U^1 zH0W9*_^TI1zSUn**Rz7OHX4C+T3xdfzu59kH8cPAKS#VifAjf~TDa#ZSg{3DDJ*`f zfH!)yc>@6aa{#pY2!l>8uAZP}oq(yyGUS=Magi!!*fQuL$)V33pkw+WDf;zyjx$ZCdaK4v5+oo2wpDPxrGaU@EcsdVZc@eB|4NqpACgC+DU zL!3S>RdF8btqFV>9~f?56;?`LKa3|Oy-hHj0UcU%Ga`kD|NZ+8>Q@f0d~&Je`?vyL zpRBM(Lg(8iiAzW+QraE%%@~7v0Sj{9KqaHyB}Ga-GaPAXJIF$;lm>?tvYJ_rHr`FT zV-%>DJ{@6D_i*<`c^?Q5ZUwvN6)*7BP6PM*ElO(ozJX^9=S2riV021~(+pUv^%T1q zUqR`>9iF(8q&yF}TcwmoesRP_mBDHG!@dhq8yYavB@UHB6&=>lz#C{MWs_7i%kB+D zWaLeU8vykx)X<>jkJYU$s4IKKUqAqGo!o&gc*X+Pj^k{iU0yen_`;hQ{|Jrb2( z4v}oU5b#!n!NCou{S*fMDDECvyXAeP1_iw5iO7IHQo{$HP3W8RzG^_^;Q-|*HEfIk%a5oIu_I}k5Yrr;5vHIz* zqnVS@4bKGzg2DM-xne%+@WnJqa(B}==^k_oz{I+lUJsVYfx*m~b`L)(EI4B8MOl|~UWE3A zCaEQV91_`=5KGHiA?y+5O~R{;X8cGo38;ay7qWlDWgZj%2m=7!i$p zz?$O^&0l6t`o){YGew(dQxtyVZpXCe&;Yl4`^_cv4f|R%-YBl;!vJ(6HItJIMxT3* z9+CjosGJ!AKuD`BUvtafu(TK0a!H?YWf}~pB>Xl2gWFb+W)s$D1cN8J|48GGI9J=V z%hVlOE0h3+sU8djW#zAjnj2W&rmQ)4pgz+ghr8L00rzcR>A~PVqVI3I2!Y~uB$;Xg{w(^feNcN4H;1R+fax#oQ$k=K zzByP7O($MQ12Gw`$|2~B$%ls-DAS*@_Xf0Gp5%fybC>53i15gC0YAOnG1COzLIp4w z{#F2iQD0Oku9O--Zjg(S*4G@3M0cJDI^+)GXhNrKm_`_}MJt#Qx^?k}O+X>!3F8 zwE`ZJ`$X15v!r=pmPGe)2;S! z-%sb8Y4<~|Tb3U`Vm?Q+4N67pO^Uh`)+Uw|NtG6u$R+*oy2vJ=_5DSGAk@SySB2DJl zDVimtu0E=@<`h(Sgbe~uE_@>MP^OA1T>xP@oXJCuOdg|9`<+&Aq{jIc)9whQn9|_J##SF|6vE-G#tEnQf)^EGD4G84N{V%!6&4o(-?HJV6;K@Q`F2Q2@z)yZ} zfO%I)HG}T8k-xIo2nWqPwaQ>u;*S#^{7^~7?_yKkBBfJEJ*WHIC~`(zl``SLgo^-E z-#WiLOwZR6G720LUhY(iYO|CgNDumg#jm^qKtUax1@8Z{qy;!SI63Yp>uRzU-nk_iQz%Z~nIc>|TB#*O3CHkvVF+|gS*p(dN?#dib&= zuzZiFuAf%oXv`u#m7QEf$OyT6M;Qsv9Kfy3_OSn6oya=Ahc=@3y9@JZ!Cg?#5$h0( zZhFoNSaJ9NX)1F8=P*T zKcA1()clzqP!B@qzUP-)-4ljD^fRlU{R|C!Zh54H8*f_lR- zy*})t7fx)xqMQ}&W3DvRVYikU&aAkMX?vegD z{pAEPK6rTJ8p`@&dJcQF80&Y-9U062qy^vvu&mo>vI`>HyOgag0?il9nH@rD!VD>tl3CUaSNga6HmCbu?l{;uygKBY?w#Fy+qiRlZoNDu zEpiscUcpM{)_k+t4>kN}c={Ea9A@i9;)ERT+YmB@^1D8^*xz`gNJuY4>)UcfrB``V z@GLbY_-iov;nU|4JwqEm$nw6i8xk955?E$Mari)F4(i|KEVE4N^H4H6Ei3z@Y3@MW zxxU`Kr}H#a@no<0^=8hfZ+4GW^lZUBGK;5#3}==P$}Yxj&qc`S(8Prplt21F4bJ54 zM=SkpaAQFn`cdg+m6pAA0&~x%(#dBMg=B zte@cr9T~w;I{u(fXmc?U>8Oafgz??K2MFVJp9*H-n33o^`p@PmDiFbbo)T`)XP&rS zj;=BgUmY2LmExUaE)~f96}nV$_we}AF!JiD$eFG98}rfj%JYpcZv}+s6cqi2D+aUL zSgl`g3$GZ9L}$AJRaZ9((T5rb2Ar0l-7?O|R_!68lU`7Nb$^=lA@1z^;hW+9eP7*V7B`3?@(j`w!MDbJt5AnJ z%guyVg8Ej*Xfh&W zS<)|0V@Bk9?aHF}GJoI?mo9ddNK5`{cM^GoF^T*5uDn%47e1Z4X`53$Oksl3aOD2E7G2J<4_R9K&q}Dqf0eOqjF1N8cG~d)IAR7KWOMqMk!Te68b= zrP>#_WH2;Co`ev0I3Ux)fl%+cw#$i1?RIihoTYLqAG~D;cXT`$DXu2!LHTk5E#kP`5dvcEq79)hz08VKC5 z+l6E#!U3v&Zwi_0m!?t>hL5F(30JIUu}2)H;n5N}QiF>omu- zU6Go7-nU&al4v?*GxB#rPDqts!mN)j*Fu)w4imsw%pQGO1Wzcn)XVj4*H+ht5CA^{ zh%RCxBYKpfZ|WUTcIUmHuxigMJjX|*G zi*5b?+SyZBa^Z$`=-m%xml}23o%cC=Pr)CBdYG@+J*vFo&_~^?XU|SrEID>}mZerknl{v@vPv#()?LA9i4T#|(3+#r@(#aJlXf}O<@3(_ zt(Kl>bk|pkbG;-xIq~z$qDIbMR%>jx`qgIP9oQXZvRy|rxRDI4xr-?}K(q9wN|aJg zD{?z)lsF9fw0dbQ-Gwozc`PS~i-Y-w^+p{zyxuUkWqGm_;K3uiR_f5*K!#Y5miIe9 zFCg#HuX|-Nd=O*KOjiQpdnPtyY-e6v0lE37F9D>6Jg+|m{kON`9A(giw^rHrtOK)0xRO#Pe~j~DKw6fa%>TOVxHvF3HHS&68z(ms<} zoog4p#g>T(k}sw=>v`rYY2ZiRZ&S2}jg1frM?Lpx=AODi3yBxBlI4-X^w^h8vN_I5 zYT@h&S+8FVkilfNALx^&@Qd!IZr}o!(Es8pujT%Qm&C`AS~uz5q^2-MR)XxylPc$Z z5wem-yH^Nnk43f>R5&WN`5iHwlN`5r_vQVWk9I#*w3%VDxCsks_fEfOxjJW2YXzaL zegP&mQo^L<1b~N<4Q>a3_rWOeVVVoc{8bU#sex8nDD(64c`CHGmP(oPUV%B>ZFq~% zB(EE(ksnu4_Wb*LX$^3o=B7Nc596|Bz?Z=))^7MEdy1raeS;X4*QRXYACiBFDi2yW@M5Cp`&xaTCkS6()9`-73>uf)O=rSM%} zmyE1YiBjbRfJz3#<9Df&aXFPv0MZ*w#yQjwizKsAOMx#sw`YF}A_L58V$-~jY%fws z4p+1po$wUi(;xum!w2*1smg1RdDKlntd_Coa$u7cAuW5+K2|g45TeLh#j@27_izy* z3+2(f92LP`2fgQvRLJNvLlMFHrU)osbxJyAZ%;qga&&QAT*vftw@ctc#Du>LI=VPp zJY|I3P{1hOf!r?+_-(!sUQX*}ovR!Y$!z4=ODjGKZn*! z?IDbB>WU3N+X*Rysn-j2Px4&*%6M^VUPB?JJ7q^*zhGP7CjwTLWs@I`@Jbq!cQz${ zn!oXd&@XYttr5>k2k)k&D+(4IaZO&5dUDbh9~^`{yZP*sBX&DP==-+a;Y-aA5BV-P zUO#N)YGt)%C&nu1q&7+#Y)zCZVp$($Xr?DJ)tdwzZEf72?5Jf*PgGytYOG}F6R&Ts zmGn-dxx_&9MA(K{t+Ny#IEI|fxjqy8PID=~oH8NB`?K(_pcJo{{cTs%{D8x3x0VvG ziN{%ZES(>XjO4$h76-1(Nvs~&$o$HatQI_~#W5k_ZacWf{e4n!gm#t8->TtpXsLvXu+oM zVgchGm+#hpi-6ju-phnS@o8!<>gZ`pDdxm zP&T&>OchpE=;DK#qW6STP%S?n{^>iK4Jd~pQqUUnIB|?nB^#+mpv<|h0{{wX77)U=SJ&C)PGBcmXUpP zEmOP;6Z?K&pJh*T*1^kGakRIKPO7-dU(w~!ib4lqRR26YxNaCpmR{9DkivcMjiX4j zL|>8o1MAouk20PVF9uaJZQ(V?yMch{CFPR1d^*iu2>qV%33^^QG+WxlgaNmGqG6`A zK1?J5V^O^`nXlj~6gX7p+n9?-q}xi5X8aoTwzEN0)L56$#|Cr|LfCT|0^+YtB6BGG z|AE%=TC@wuvgmPp;XxmGORpW6>2qcM&sVIqsIdS__%tyCuhYGtoEwGA|K5x5_<8!4EhICz&r2*%?ENa+w&H; zdM9&XdF1|d%^nV;6I^nm^r|JwbvQvSIZ~&G1sd|76Fa*j{2#3SdcFH%HiFOi@5lCv z@>khE@WHdJAHBcWc%;|&^D92ZfvJWd;YCI-l1!uu&a%I!uk7ULAtuC^;@Aaw0y)Rhw=NC9*s01ExoSheKv>;#Ca2#>>k4MpLA8=tKeorzDy z;5}mQetWCgquH0^EShlGB!OEgnTop`K9EPO(*}sx48GWGLPWO%2lB}2NXwsx?Wfkc z#ip~HZeF;faYr+|&PDFtOp416Hr(*VaG^WLn`;S66hnKlD-CT(vKod)vwJ-Jl{R_Z zcev#qDm<{Zd&J}r^Pq;YCR&*z-Q&J-$o+I!N@`Wk3r*HQ*c}!dKf~OgW)`=Cp#5Fq z>6ku1prBKtTulwXkE-?As?+5IMgId$8anZX@9mVcK4sH{;y=a&PDJ0+Rx@|ATJP}F zu|Q(fdrq-0#YFZ{jr&nce(!r3-}JM1^spV@--*z4t!TL$AiYLI738vQcj z?BpBAp`0g?5f9<)-N>rmco!Y|hW^T$&v<&CUH`Ay%~&n&5&H^s+dZ8+x4%bP`+ckg z0jA=CD44ZXQt-T__VU#I=|T;vsqcH}$9Hw&&{k3Gv>KeAzxuWWNoKX(UO2hPB&ZX= zQn}-Om7s8|T7Urmhnt$%i}GYAPNk+(QqPIY1^vV?`wZ$WyYDW3lqjSm2Yb1FT>Jgj z*H%@Du3E_Fh*|U0juSs|DmftW&x;5nR)r(uSIgX@oGw*SJ`|_xx;}N8=6gN8J-g{L$>P?YK zrFpl@q3R|Fj%N{U@ewm2qi;guBr2bocv~;`r6#%h>3ew6n~N^g@q2Ek9Hcg$;y=ki zqtB556t}I)`c00r`lOPw(o;eeHX%>BVfhbraDpi@CNq*&{Ua)uFEGLphluBT9xbyR z-M8htnMxCN3+>dL7(<6R2_=GW=~3fwxowQRwm7u*o_@UxZTRU~t)=6ADo}5IfESHA z_RVNPF#sU4fPae;-YkMbT*^aN+l7oRSoFkq9*?ji9*t+M&Nk8PQ;+zO80*{2Mh zgl$hcInpBrT-p_Hr5;ed|XA3bh1x;Rh&rP!5bZ2ai53t?oTU&iaS%HimFOO z&K{Z^?m_1R_35{xLPY}2?3`J$PR9In^V^etDn{|7#9tz-6{9F|p}9e4EY&L|nPgt# z^Lv|+$H?j?`DWBI?q|(o%qy!a9v)Yrp(oqvu3iQn96Dsi)E$f+-M{%Cu5fw>UJB~3 zSMV-QdYL1C(-=kt=Y%lhbSNH>0dLR55v~=RkrE8&+1XJQ{Y} zJ!MHT>t=JNWYzc&%&vF=2j#VcO{CFL0^{HkU}_?hcDl zedpbZZ3v2pfrq~^Z96JToqv*H_QZ6VkyttCy9yH^`to;}=Jp$!QKC@XfF~!*w{um9 z4Iw_U4hS#pKO3`Iu7q)yo2J$>JiDD)O)|v_0+gEf$|kn<%+~R#NT5l*=1PY)4X%tl zyAqEvTKg-vXoI9)(BN=o1zSA0$uDkgC-&j_99BiaS4cq&e3Vep{pX&qO<5wMnu*!T zMyY4=_Qzj8EMAInaWO|1KAPYCs8neDF<{dtNFqCPfs;dL8vGBQzaPo-dQF^DWFXv> z#X>{PglcT7>FQs^izIuZzrHbo2;wFHuRaYPcz%T$y02JuBZ1jsdf#9@QPBeE3M@oUniDbf{ZXp;&leCZB&vn*z}ZHNUr zH^kBv7xB-jPR6jWJMz+Q3Z7krw)Y+=VZYv2nE0BKsFxOxVD9(zGEbAH-sI<4KJ<*5 z4(S}Mn3|$mrM?rv8uYd#;N(cT1pS#R1l)+;U6^d_^i!z3A_$*lOKWuN;601sQF)kY zt*fZ}rkJqbp`k6Y@~`enD_ioL1$Qg^dIjtbqnPrkXWO9`Wm@7;x(4yIBKF{x89Ccw z&;zDGM}fPh!JZVn-U=#Bg7ej05+h769jfqaE7*;Im(yIUb0iW`v}?2eCqgB}+=sV} zTB%=Xn%7iNbW?@7mDPQqP>IUcxnr9Vm9VP+y)oq&E?1{P49aDKTb#6;$Bc+a$QNwK9C{voyYcgSnYma?B%wgeLPC}>}UAD2sWC(rgRlD|nc-^VFi z$nh=mF(#QANY1@op;hMpylDd$n|6U>Vea#1h(>o-Yorf)UpfyQxqz%N$Vr&I1Nd7% zq5xnl5!Zm$1XInP5wC2~iQ{wYicC}7GvMsziO)rokX}*&(kLLRK{wHYR*)b zzIkD9ji{F}YE2f)^2)4OKmx5b!=rHgzmv_n2}|*dFbm9N`{K;O_|QkT1=*5!FE;;H z7KSK0l+}&l&lL+9eZc)(BFvKm=m&+d0glv~5SyUR-S8KTo{HybJQ};%)CrN~`&Q)J z@gMk@K}L@39T0jsb%WO-Brw7>QdW?np)g17(vFrY<-N;i$A(L8Yk@h*m#=*q76fn( zTPYp3$4vT~V`ip|ASBPOmbyRObB5aQ)SDvt(^K%IGk91jWZ$@Ky|5)8rwaj=YG=LF zUMqm9LkNF1i`;haGmcALt<~J;J7L;PU@Wozv6fiY1bJ$H&Dx9&3BPlHi>of z$``}`d*jy}$EcUVbx;L+=*AcDp6)cXK2xNrz+1cxEs2@>!HeHEq=Yb7X{E@hR~%)u z(!KS`5IHHnNqFdCkt1~CQ!2^2HXoQeBy3DcDDfuw<@>L>Jj>6b(NfVUilhk9mzsJx z_dV7u%RhG{^d0%<1; z$vqEgb%dA#QkxWnfu)<`Q1QCr9#Ikio#0rb#lV}l+TW0hqKT2_ozRijIVs+xPuh? z8Q3a}7c9~EW9oXyH4*E4pqJ`ZKf96n1AJc@*TSZOVz28A`v z8=a4<#o_2H5SyxNP^OLUq*T{I6vU4IrVarf+o_UrS>9};fNm+84Ds+ZGws4-(cel_ zZx3{ReX&VfN)Yy`-3axq<73q&%;+tCgUw@}ocy>4-tV|(s>LbG{cY#N^L4x7v$Rfe z#LRZ_uZy`F1q*V}{y*y{7t;tD1Qlu0$<27rJ_eOa87DvLuL z4S0bJIfqPuOlqfEDMJ9Brg7MP;?h(99~!u+To2#jPD=0&Jip5CrD#U*d!+qJw@Ys> zUH&CtF+9F1xH0D0y)szy*7T=VX+$_3|ARJM6UBZa@KElL;t12l>6J`sKU5*SSdp$# zO8AM+q-@01qVoRI?XS{OPgoY}OwHHE1N6(UYI*r|mYXSJFXvPH(K`cU)>(I!*%eGK z&kfTDg()xF$Fd$=N${4DBs$urC9Zn2Qqwhz<(wQ**1wkBF?lhwxo;$H=Rwr0-XAu$ z>iHIR<=N|d?poycf13K{=t_d-?byzZZDV6=W81cE-)yqkc$1B7+qP|UgN<$NclZ5% z`lI`t?sKN5>glTPnW^q)3YO2;0W(sW1#ub~C&*VUE47Nt1peKO?~j%%Eo)z~d;fbc zz)-d64(t@l(ccEos9(jAcL-yjQ`n%j!P}JU*iq$E=woQmJJJz0wNFGo0k^`r7wQ5P+=eBmJJdECKSPA%tT=4qWQ}gqD z(WA{yt$DxId((jD;DFCe<&0lDwx~he7@F0ZPt2!Kv%HuJ&yX8+nZPqKL6IMuTGkd~ zrgZ$IOfjI}dg$JUP%26-cT>&S3?spf8kpv+YOJY^H!vt#yO^NyKJF92u$F}<%yq0a zxgzT>=^|>2R9)3KF(|5D)^wM1n28veQc;6fpq`tcGKQdLdzn24ctT<$czRHfY*Hz) z9}KM2l~5UV-wf_yZoTf)rPn)agE|+hS`G3iP4>dBJ@De@<`1_pdvrMtU+|~KK}Kqk&Ifk@1$Z{0G|kqP*@hSQmUp* z>5mWmM`GK+uRfXErP5T6Lc`%uzDo^hW&(mNO>ntQa#RbDw?5E3JQss7ivH-h}Frqlg8C?RsMc;?y& zRZPA?&ASmSjqjEvndgJ%Rz!`n;>N~SNA{8-I@gHJDT5#!gwo*`h>WxWdh8Z=#E_yXQHSunVewo z`lF|jIxwJ=QD>7VEv0JW{d_ciC{DJP2kTwpMv0>am zacgx#3ARYvdm@oPI;LXjC9A?;YJV2h?>Z22>Y4Y~&`}*{LNx|kK^&28adqV8AlIyA zv+~F2obIA^hHtqT_71$2-yc&8)bWoZX}TUMW@40sHN|^_Y#h zf^wE^U_8p!f33Bi<3N8PS6^QryXM<(ZO-|G3OexNP31Q>XHSXLim`qFepm|b4ECP_Yufs)&RcLKG{ z97mre_dVPyW3n9*iPIo(XPm~(H6l~ZWt#08i?&wk0?L$H zsQ7s8XQfx7NMI*NwIoerpw^X|Mvhuw>%G0dd?$+kfm+(sf>^#yw82BHfzs-r`Kv&2KI#?+I{1hOA)tXExmCx0JiJBtExY% zex+ck7~C^Ai;J+;BXDm?m2!?l9|JT%3g$j!6|0L7%enJT1C~QCa|#Zx#%gaP?pyRk=I9Rtz_$A6?JWP=s;}i3Vaq1xw40RJ*TBfB z5EZ%@3nG&s>myC-7EC~D%1x0RNe))}`FVLfr)g93?>&98Auz6n{cD7{tx7;cz`%H= zTZ5(+Rn)H<%l(-f@Q?RXJ8r@f|8~{qcY)LvgR$MqP)a-BPa)sy*n6>UrM?< zLG7$Me5kA*hWUkbGWZNxaPBCdTw^qFc0|a>`3TM|PAE-XsjYOLC*l#E8J<;cAr{S> z`eyy8=K8!_V?Jk04e)>!23lmlPEg^e^(+J=zDal4uk09YJ+odl&A?Pta5z0JUt+Rn zXxs34cx?7TRj|$Id9i3MO4X%&?c*Lp7cjL9(z%tjXo-_=&$sGntXR(HI)7hEn`3ca z!6D!x@($1G5zfu&d0Y1-=9eX&^4@VgLt)@K^Lspxi(A|nvAklSV`(zoS3vaG;{7mZ zNa<>f(`t!x{j0ITde!yf)8sd{d$^hpI$9l17b3L~Da2pHXJ39FakA~0sZ|rT{oC&5 z-AYiHE>kH7mkF{=`ntoc*0D*&xEN(3ux^AitCt?C=CpI~`#tk$q`4h&zSbgltwZLoe?Tt$;7?LpwfvJjTY!?f~9U~-G&a$ z<11W8*!RuSldrR$NK~FGS_7fC{e^D&bn_lf$nI|XhT-*PFc}z!SXlZTi~cCHan=GQ z|2o(en_6qhB<0=IkWLRqusT{K35J7g*#903Go&k4KBWM$m4R97B8+64yQMlyEH?OS zdIrTD;T;Un3XX7q*f!=&;AUXD+SppewN%{q8#Gbil-zC#PzxWHHdCJQil@t`gVjqV zCgCq5fA+7qNJqn5Wux0K%oUp?MJ#a~ZNO(?>JpinqAtp){?5WbYULnZ1kWBZkkPnL)fH9SEOp0*&h{c6~mKJ330TcD=s zRQr0@^9nYrt-!~(VbPW+IdyLDVFt!vHsW4~UO8!Kpjo)s3NKv7rS^WTw!472Eom=Q z)!%UWG3e$`ruP+CvDBtToU|$0o zikJcpiF-Cw0^FCafytHph|P7f-HmQ}y=g4n+OvS?fdM!)E4C4N0|Lj`6DSVs^M;n1 zsd#$)gx~7p^O6KB+v-HQD&_YA$;heXwNZK%p*3m+>4sfs!Q69Dbc-YlPUdEH_MCXF z1V4ud=Zu=d4l>flr3jH9)jILltsH!O=(tgD zzo<=d&tY0s7)W0_NxQc_wy-hZqu|_%Fn-n`BUi;FqYF4%!cIy`+Vi@(^;YiGvfb=0 z6@|z-)*SpY35?+dxyly<=UkL*S10Jbv)-eCzvuTPCzUmFX$>6ZIw3CiJeuc-!f{Nq z;fk5^v*6YzYhsEuiuc74#ZuZMrc8a26ZHk|E;>vs*+`p-Fi2q2v`h?WJ{UZjf zArA1!rK`15qYBE!cHQ*Xu82`&0ody<0!ONCtRhRkvVjqb-b!@wBvHN3-Ej_P=O6Jr zR8r9$C%;Y#is`{IdH(&LhMCKw8B>eqENHC{_AZvFMx&QMmrS3DkpLeFX_PlW@hul8 zg<%S4DkHU|nlxwmvN|E5X6P*)UWvY^)X0JY4F``TSp+wsI?w>Ho&Gspu^P*nvU*74 z(Me7lIQa*Aaf$S3NVlF~7IP>j5ubSpl{&tb0Pk6VqsrR1h0|CX$(WtrnCpwJ7R_)q z@^eH+NRkg(WrW=lKVQKE-}8#5rW)y^-qZEn&UoUcs6<8_fu#r&-$9ec`zB8OpyIqI za#!}x64=rL8d-Lo3N9vJq`PbfM1+KNjGx#+#4D_4#Iu!L_Y^o@#@V>5VD}zuIX@V( zf|H+)7FSE7d8%eIF`AGJzhIcUN3MnYQGnwq*ItE#FXn<~kv zFQ`P_N8+c7vALizpEb-FlMTIWeL~S%ICcHGJu{_fbJICQ9Z?{+`vSxV$N0zTXX|w2X>$XF?n#B3JYN zptVzqmaKboZw1BPtE0#1|E?c;PsonR=C|3>2S#z`47A7VPw9ILM*r;K9+@PN^NB~K ze7NX#DSn;kixF8h;u_WlexTUot)p{EN`1}ym>+~nE<0cpW;Q)z25 zYsd4lSIs?2#pz@af>-M3f_;^nmrJzYhuDKXDiV`vuU$$)!8NT>NC~p95@j=>d`U1o zU%+5tak&HpqLeFLHc}R0aw`eDN*XkU1*6|#2kZ#rMmWL!)5uR!gE@mS&)P4;CSxHb zj!a=Eu`SOjts@pNgEd0qV0^{6K*^l}@Zj@}KC|C$W|N(Dg)0)Ze#jl#Fp)=ba_gi# zh3}^4PE6%=OzFc{zjzlUC9edCQFZSwR(deojxFG@%r4Tz#Lr0%KB6(*EYoQ^`b3M=%z zJp8Tm;;eHZ)JiQ*!C$MFbF54xwNr(X2_pxG41tJ%?*ApK4P}d#SQ^Zv^Nk4#9gRYw zG_bO?J_cerk5xWRG@ZxV-PQPh7Vc(<&RFWYD8*29hoG01l%nf+_i-H};Lg&rt&lQu z-t`xipb}bJ&rYY$Re+PFXLtvJ7VoR#kt&zdgnEm$=D<9ukd0C;0u_+l-4AORZ#8a- zlR%r5tGiXvFAyNw*s=N%l*3T_&6x|^w3Nj78$H~>y1W1QB^ELIlVkn+^@Z0?03u}T znvQST-UT-v_)jA=3$37c!ZaH*Jg8>laR_aJ-`iG+hu$zk8z%uwPCp*QnzCuRo96d$ z(|5dTU7cBx>v9eo)PwZFi9Tz)eNtR7mV;gi*1zS#Sf-F}`xB^F8R8U~R0CgUf$K`v z%Ac}!@S#^ZR`ot61kdl$7^!KnP2UzO?&0oN?pRLnP(Po08YX`p*LYBF)dT@w#f+f* zKQ38b6lL>f?ii^+bZecioX}jK58FoEI)~O%6_YI9#WCwp@8H9ILsB!WKHum?uIY{R-zxQNML&;_uSlijflail@C4r$Ud*+jr1>!sh-~+b44UnPAZLe z%j%kiX(aV_SH!L?fxf-q%I`B?mz!muZ)&wjXY)%BBV^9bhJE2_lPJjR4*~_^RXyF{ zM3*sfitG(+HLKR-LILRg?hN0GR=abjpzU`|9m5y$b_J&W^F9#2;O4EQSoNL65u5pO zA+Dm*_RAGlY96iV@|Z1deBRO2#b(7B5^D!@@=w6H;`p3)%M!3`8Czt17GFhcq9&6V zyFbwt!a1WC63oe)_sKFAyt^%Y*BALXIT$2L7QO!QUeFLUM(UJ{?j20GOM&gNgj6xK zQsVPEmlCT2wQdSIv+Pw`CGwY@Yj_Y<2<+~lf#nuAsIlAHn2~6iEPb~9Sm&rRqcQFs zx~A>8?THOr#04y4DyPra{LY&%^XUdF8DsZ;O=tCvjfL82_RMSN*xu`dfk2b^j!+M{ z;A08vW-kz$=={ATv?JeDAIJFV%6?~dJSx4R@_|b5mmiEko18`g)!YFxNzhEg#99A} z6;B=a)jZ0?^jchvs@{dNI5v(hz2riWkFMUxY>-Y7$Ck+n3H`@!aI4*gl9CXI&zR0n z;Fpp{=V5W@yReHTh69b_auw=0q@t)}l3KKqNyx&`OHz5R5Tau^WF(i0`*OHHIp8=64xhO%OUWUYcG|l%$PVhxcY%igk%IY=(PYRqmiy$Q9es z*c!{mBo9jh1HoB=e6Yr})iEsZNBgf8b+g!r!<{sq@B@23zR$K@ZOkXgTKtfAn;!QT z7w+f^-jx0#HX6<3fcK3my%wJ2)iO6XrbKbUIn|$T;z{C(#%ZfG=$c_pm4vs%af@l) zN0GLY?76ge^U1@#B}x?+0gBPurP;m$ulJzO{#SiH&l?*X{6U5-pOOQCuU?Cvm>(CH z7hJh_Oe0Jm{``$|peAwf=km5n(H(_i`PSvO9+S1jBG=QpeZ`}1b=P`U={-%H6iIU& z5Vi$)e-efa8@O5)hB4z>{)P*7 zx%4#AuUKBRx4UXaR6H6)%w=N^;Bdfjjnhc&`kPv}jFre;m>8?gQ?z)yHB($w2uCBKf^r4cppx!yb2Jn(j{>Znfs?Io~Gp6tld1AHCPXPC;uL5 z8XUh4RB<2Xj7X2@8HXqda>`p&0X6MRW_cIqD4{o7 zP;CK!GO#R-__c`ElZ1|5Rt<;Y$`iuLcDqf={|7=!ND3av3NqD<- z#yOwJ*Jp)Y8?m$#cI54f{I%#_Zc(E=Bz;y<$=D*_yaALE2i>0M zLpKix(wi6t%zJvKj*gljx@ggVf-f2Ok2jUZM103vNM_+a_pU>u8Pr47%Ft^BN*le6k&5f?WX2?^cB%P1&r2d&+^45_8qTf^s&mhM(O}-s@gxnr5IR`G_pixlVHhv6YWx z7VTqv8D;FEKxDpn$b#LNDcpn@@C?~!z1v<3)I@aO@*M+A`rmhM-Wy#h!si4ljG4!M4IOU=u{~oK~1DY^8epV z0IC*B!^rw{QSvc4km9W(|29xB@#T}=`59n6Dl{vDZK!`<8qCuTq=JkY)t*f8Ea9UQ zaV@g0{)Kyd3z#UZKxV|V7FXqoVnX&D|4;kgvepbG5?N);LGU$Z^TaI1!XJ855yk(_dtt%|XyL*i)th&?DEn z81t=ZHJ30|U+X*hhae5jpNK0NwPwmD^AGk8V!4SbX2XqgUHjQXx)IIF(4*&r@@@_` zGBj8gojHuH1!TWb&@mXiLV*h#<@r4DV+x~&r6>En2+@#IzZJ1S8zt~o9V0@jAsv4k zWI88^wCYQH!a!=_7;K0BdM1QK9}{sKI>}oROId2eivcbZ7aIrP&+j}XLP1tlUUMzs zykZlhY8WzopYaF{&}EUc%bIGlDTBiOAJCn{ zNQD&76jVnE%}L}#Xpke0Zx=!iRTzlq7_ECbD3?~ox+;rp<9kS%SFRM27oJ`p^?_09 z&j{cd^L@(Q@m#0YxKj2*8D>zNU=ztCJ_Dj%hMQH^tD z>D$Iul7T1j>Lyi2J(WA;SX`t6Fc)tgPr7NqhefhK)trttF~G)l&zsY}gbf_>OR8nW zp_fok2^q~(+#kR8Mxm8d=|D^~*@nLxDx9$uAZ*x~^v>g=4(1IXdZVSSCQ#^DoXr_Dmb z@m$C`8}uIvRE2xebYTJJcRJKBd$K%5fNTXcV z$as=5`-9)yINnRAR|MjVVR{LPdoiu z+?;?GOX%o_?BH$;B5Wg2#mL+PsIB7={a!ZA#Kcx>Rpw}aS+L)m)cBRvc}eONZ zhHLgvj~p5`V>spdx7H@fxh#yPBm#6$PoPeZ1iih8I8tm?bm5uD3a<5#(c6kz3GS*? z@iJ&eU`kcXScXBOEC6{7o0%~yyq|$DO#PU%2tOAJWvmQ_46Q7QwrrS7Zuv8fj2A-B z&mZ4U3+?ijwNi(6Yx4&+&mN}w9!o9ow55ow~)ph7c}FPTj3#PCho-KHbT8MpCQ?4q?VH-7?Rb#zWUNP|Tk@>ms9WoQlQ~ zqj~MU1C8Sj!5q@0T?IEH+IqDq! z%DHVeEJ(ltk@=+ep-s6R#ecU|Xbo~_j##=yKHS%DciZEDFjYWzhC-U^G44?W4>g?* z8mHZ4YG?RH0e{{cSH&=+Pt^v|&sf)42DW-8Ed5DLZ<&|m)4$1?Xw<#58%4m@52cg; z7EaZdaJn(^rZ-L1IWJ@Bx^RIP&$Vmv$L%`O3NW*Wuv(nkzskn=8t09O)+T@^%&k<(Ij+OD&whNVC&Y=EX)V@m& zn>>k#m8~|H$5!7ZleY?~as~6$Tkn%6Rz%0g;ZW6GC6jkcjn%5W_;wtENC=X%Na$1f z&%n){--XIoSuDh8I^mGDs>Y1S6N$bf09co8h=hItBt=bhGfH#vCA`=V@R`lOL z0UlKlN)Y5;qHK9$J& zl&Jf7(?2oHs^s52I}x-2p5-}W@UZE*U+-gC)*%TBz7_B)skaYy;81iUf0<6u-q{pn zEe#n1R>%3vohJRq=1K?(98cREu{6Q!OV^O?8)(FXy^xe|c5Xt#fyaglFI>H>f|dby zwL`TC#fT0jzr11zTy-o;1dfGn-``T+Fg#DQ``1wtFSm|~dek%Fd{(6mF;2Mt{Q9L8 zgX&7K3xU4O4XcM#Zk%ph_Viouf<&D~!Dlz%;N@usT5h#WAS?+bl=N5z8Z>5vaH60A z6z$_f>)Izf9wX8o4O{N=>dYpG)?fx_fmFA+<@Vuon&Qt_6HJKH5y~i(Hbif~5&Tw3 z*xIoU>`6Gt5MypU>e_z**p#v%8p4#G9yk@JHFa=rOAA@PWU@)jN6yAvF^$?ncunxt z{zRUi|0IdqfaDOO5Z_4dzV8RFL+9+J(I9qH*!XI z%Y_DQ2ouGmX^jeCzJK&}88l7?D%3LF1{!g9Tm4Le^h&|f?}Wv6&f~lyswt5+OUCa+ z!cH$&{472c6Mn#!LbAkLg>s9xlsF!K!Zrs@H!^+DD2zv9XaCWrpOMoW&oSd}{J?44 zz4;|ZgtISH=R0SgI%N&q*0Z6=vIo(#pxBi+9DNmy8wlJC4^Ra{*`eUS}-?Y z@J|Q=qAZ5}m&HzH73fywK1L1OQsNZ~lZbEfoH()+FAS!Az`s8aGBkYhJd&rO750Wk zO{4mb!p5(v@%3rza+x{R<5;3YDb;F^#C#}&Bmlh58iu7R1|SUdXGi;^*w~M{@mfe# zoXg=b-8_j;7L|iGqoH{F5_gMQXE{8-(16)#F>tF+Sb|TK)UrynVT=3zSf$4|}e}5cM zj$&T{8ScdFHvXBYt3LPRO3v`$uyhN44!E={hS#uImglH1DVAycPjL%MZqepmAOi@J zt^Yt$URoCZhU*$_j+5 z?YL8hDY!<%j|hY*!^y6nR$O$Nn0bMo_Q^P5kf40&stwmP6_2K=h0Ob2BNT=U0G)_# z#Cel32wMuD^znK~i# z(|WU%n|x#PgTp(l8DACz@Ggk_9@-cwb{D>^jBN7n@D{@*5oi zKfe(x8`xVOl9{;Sed3KX-r1pK$wZ-4g~%oG(&<=(;eTMYqR4xuuE0uNbrUu*nabDI z*Ms8`svE(M$NNVQ&bFWRej26J80OsStOMB;N6yYf;w~&e)G}srYrwTaZMo3)k$5u! zLjX!>c?}6c)Qdk^2587&`+;ccTK~0v5W+bOEvewRfx(K!E%j}Oe#$jv;M;Pfs-^5% z^OeN8qr&(tEUX!`vgTMSzScPxG{fZ!=L(nlVKRtB4>0QUSf8qb2*^`XgPcfH&@$; ztE_vjJTXwp+98-cA@IT`go71>MmhJCDuWEaNOLj14MSQfZoFNTD*uEWl`&uX9$ zqFOlw1pYH-_7!C_4Rz#~caLxuRSk_*!65KR?zZ65yZ+kObyabgsWcTgYK9F({ZESz zZjIQUh&2;zIzz`;tyhZ6uH0Smg!$xE8Ksfbx2}T_7wQ$Cqj3La9v`gJ>8qZ!1@6a6 z>Fst9VH8}*zXEz%08Qin3draGm4BUF)qlaiZTCMDP?bo6es}{WBcUi>EoL0@{{RjN B7E=HK literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_radio.png b/plugins/ubiquiti/example-graphs/unifi_api-xfer_by_radio.png new file mode 100644 index 0000000000000000000000000000000000000000..f60ae9b9ba1a210b8ab2825c56c0e425dd5f1aa5 GIT binary patch literal 14718 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 G{l5T5yoz!F literal 0 HcmV?d00001 diff --git a/plugins/ubiquiti/unifi_api b/plugins/ubiquiti/unifi_api new file mode 100755 index 00000000..19dc59b9 --- /dev/null +++ b/plugins/ubiquiti/unifi_api @@ -0,0 +1,1212 @@ +#!/usr/bin/perl +# -*- perl -*- + +=encoding utf8 + +=head1 NAME + +unifi_api - Munin plugin to display device and network information from the + Ubiquiti unifi API + +=head1 APPLICABLE SYSTEMS + +Unifi controllors with direct API access + +Controller version 5+ required (tested with 5.8.x) + +WebRTC is not supported at this time + +=head1 CONFIGURATION + +This script uses the multigraph functionality to generate many graphs. As such, there +are a significant amount of available configuration options + +=head2 API Details + +You will need to supply your API login details: + + [unifi_api] + # User name to login to unifi controller API. Default is "ubnt". Ideally, this should + # point to a read-only account. + env.user Controller_Username + + # Password to login to unifi controller API. Default is "ubnt" + env.pass Controller_Password + + # URL of the API, with port if needed. No trailing slash. + # Default is https://localhost:8443 + env.api_url https://unifi.fqdn.com:8443 + + # Verify SSL certificate name against host. + # Note: if using a default cloudkey certificate, this will fail unless you manually add it + # to the local keystore. + # Default is "yes" + env.ssl_verify_host no + + # Verify Peer's SSL vertiicate. + # Note: if using a default cloudkey certificate, this will fail + # Default is "yes" + env.ssl_verify_peer no + + # The human readable name of the unifi site - used for graph titles + env.name Site Name + + # "Site" string - the internal unifi API site identifier. + # default is "default" - found when you connect to the web interface + # it's the term in the URL - /manage/site/site_string/dashboard + env.site site_string + + +=head2 Graph Categories / Host Managment + +Sometimes, you need more control over where the unifi graphs appear. + + env.force_category 0 + # By default, Use standard munin well know categories - + # system: cpu, mem, load, & uptime + # network: clients, transfer statistics. + # + +To use this feature, set "force_category" to a text string (i.e. "unifi"). + +This is very helpful if your graphs are going to appear inside another host - for instance +if your munin graphs for that host are monitoring the host the controller is running on, and +the unifi API instance. + +Sometimes however, you want to monitor either an offsite API, or a cloudkey which, at least by +default, does not run munin-node. In that case, you can actually create a "virtual" munin host to +display only these graphs (or any combination you like). This is documented in the main munin docs, +but in a nutshell: + +In your munin-node plugin configuration: (Something like: /etc/munin/plugin-conf.d/munin-node) + + [unifi_api] + host_name hostname.whatever.youlike + env.force_category unifi + +And, in your munin master configuration: (Something like: /etc/munin/munin.conf) + + [hostname.whatever.youlike] + address ip.of.munin.node + +Make sure you do *not* set "use_node_name" on this new host. It may be nessesary to define "host_name" +in your munin-node configuration as well, if you have not already (Likely, on a multi-homed host, this +has been done to keep munin-node from advertising itself as localhost) + +More information: + + * L + + +=head2 Toggling of graphs / Individual options + +You can turn off individual graphs. A few graphs have extra configuration +options. + +By default, everything is enabled. Set to "no" to disable + + [unifi_api] + # Show device CPU utilization + env.enable_device_cpu yes + + # Show device memory usage + env.enable_device_mem yes + + # Show device load average (switches and APs only) + env.enable_device_load yes + + # Show device uptime + env.enable_device_uptime yes + + # Show number of clients connected to each device + env.enable_clients_device yes + # Show detailed graphs for each device (per device graphs) + env.enable_detail_clients_device yes + + # Show number of clients connected to each network type + env.enable_clients_type yes + # Show detailed graphs for each client type (per type graphs) + env.enable_detail_clients_type yes + # Show unauthorized / authorized client list + # if you are not using the guest portal, this is useless + env.show_authorized_clients_type yes + + # Show transfer statistics on switch ports + env.enable_xfer_port yes + # Show detailed graphs per switch port + env.enable_detail_xfer_port yes + # Hide ports that have no link (When set to no, unplugged ports will transfer 0, not be undefined) + env.hide_empty_xfer_port yes + + # Show transfer statistics per device + env.enable_xfer_device yes + # Show detailed graphs for each device + env.enable_detail_xfer_device yes + + # Show transfer statistics per named network + env.enable_xfer_network yes + # Show detailed graphs for each named network + env.enable_detail_xfer_network yes + + # Show transfer statistics per radio + env.enable_xfer_radio yes + # Show detailed graphs for each radio + env.enable_detail_xfer_radio yes + + +=head1 CAPABILITIES + +This plugin supports L + +=head1 DEPENDENCIES + +This plugin requires munin-multiugraph. + +=over + +=item WWW::Curl::Easy + +Perl extension interface for libcurl + +=item JSON + + JSON (JavaScript Object Notation) encoder/decoder + +=back + +=head1 PERFORMANCE CONCERNS + +The main performance concern on this is the huge number of graphs that may be +generated. Using the cron version of munin-graph may hurt a lot. + +A bit of a case study: + + | My Site | UBNT Demo +--------------------------------------- +Devices | 8 | 126 +AP's | 4 | 118 +24xSwitch | 1 | 5 +8xSwitch | 2 | 2 +Output Bytes | 64,262 | 431,434 +Output Lines | 1,761 | 14,586 +Output Graphs | 77 | 530 + +So, just note that the growth in the amount of graphed date can be extreme. + + +=head1 LICENSE + +Copyright (C) 2018 J.T.Sage (jtsage@gmail.com) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see L. + +=head1 MAGIC MARKERS + + #%# family=manual + #%# capabilities= + +=cut + +use warnings; +use strict; +use utf8; +use Munin::Plugin; + +# Check dependancies +my @errorCode; +my $me = (split '/', $0)[-1]; + +if (! eval {require JSON; JSON->import(); 1; } ) { + push @errorCode, "JSON module not found"; +} +if (! eval {require WWW::Curl::Easy; 1;} ) { + push @errorCode, "WWW::Curl::Easy module not found"; +} + +# Fail on not found dependancies +if ( @errorCode != 0 ) { + die "FATAL:$me: Perl dependancies not installed (", join(", " => @errorCode), ")\n"; +} + +# Multigraph cabability is required for this plugin +need_multigraph(); + +# Somewhat (in)sane defaults for host, pass, etc +my %APIconfig = ( + 'user' => env_default_text('user' , 'ubnt'), + 'pass' => env_default_text('pass' , 'ubnt'), + 'api_url' => env_default_text('api_url' , 'https://localhost:8443'), + 'site' => env_default_text('site' , 'default'), + 'ssl_verify_host' => env_default_text('ssl_verify_host', 'yes'), + 'ssl_verify_peer' => env_default_text('ssl_verify_peer', 'yes'), + 'name' => env_default_text('name' , 'Unnamed Site'), +); + +# The big table of plugin options - see POD documentation for what these do. +my %PluginConfig = ( + 'enable_device_cpu' => env_default_bool_true('enable_device_cpu'), + 'enable_device_mem' => env_default_bool_true('enable_device_mem'), + 'enable_device_load' => env_default_bool_true('enable_device_load'), + 'enable_device_uptime' => env_default_bool_true('enable_device_uptime'), + 'enable_clients_device' => env_default_bool_true('enable_clients_device'), + 'enable_clients_type' => env_default_bool_true('enable_clients_network'), + 'enable_xfer_port' => env_default_bool_true('enable_xfer_port'), + 'enable_xfer_device' => env_default_bool_true('enable_xfer_device'), + 'enable_xfer_network' => env_default_bool_true('enable_xfer_network'), + 'enable_xfer_radio' => env_default_bool_true('enable_xfer_radio'), + 'enable_detail_xfer_port' => env_default_bool_true('enable_detail_xfer_port'), + 'enable_detail_xfer_device' => env_default_bool_true('enable_detail_xfer_device'), + 'enable_detail_xfer_network' => env_default_bool_true('enable_detail_xfer_network'), + 'enable_detail_xfer_radio' => env_default_bool_true('enable_detail_xfer_radio'), + 'enable_detail_clients_device' => env_default_bool_true('enable_detail_clients_device'), + 'enable_detail_clients_type' => env_default_bool_true('enable_detail_clients_network'), + 'hide_empty_xfer_port' => env_default_bool_true('hide_empty_xfer_port'), + 'show_authorized_clients_type' => env_default_bool_true('show_authorized_clients_type'), + 'force_category' => env_default_text('force_category', 0), +); + +# Set up needed API endpoints +my %APIPoint = ( + 'login' => $APIconfig{"api_url"} . "/api/login", + 'device' => $APIconfig{"api_url"} . "/api/s/" . $APIconfig{"site"} . "/stat/device", + 'wlan' => $APIconfig{"api_url"} . "/api/s/" . $APIconfig{"site"} . "/rest/wlanconf", + 'sta' => $APIconfig{"api_url"} . "/api/s/" . $APIconfig{"site"} . "/stat/sta", +); + +my %APIResponse; +my %APIJsonResponse; +my %Data; +my $retcode; + +# Init curl and JSON +my $curl = WWW::Curl::Easy->new() or die "FATAL:$me: WWW::Curl::Easy init failed!\n"; +my $jsonOBJ = JSON->new() or die "FATAL:$me: JSON init failed!\n"; + + +## Fetch the data from the API + +# The rest is a way to use local files from the local disk. Undocumented and not really supported. + +if ( !env_default_bool_true('USE_API') ) { + if (! eval {require File::Slurp; File::Slurp->import(); 1; } ) { + die "Local debug unavailable, File::Slurp CPAN moduel required\n"; + } + foreach ( "./demo-test-files/device", "./demo-test-files/sta", "./demo-test-files/wlanconf" ) { + if ( ! -f $_ ) { die "File not found: $_\n"; } + } + $APIJsonResponse{'device'} = $jsonOBJ->allow_nonref->utf8->relaxed->decode(read_file('./demo-test-files/device')); + $APIJsonResponse{'sta'} = $jsonOBJ->allow_nonref->utf8->relaxed->decode(read_file('./demo-test-files/sta')); + $APIJsonResponse{'wlan'} = $jsonOBJ->allow_nonref->utf8->relaxed->decode(read_file('./demo-test-files/wlanconf')); +} else { + fetch_data(); +} + + +## Process the data + +make_data(); + +if ( defined($ARGV[0]) && $ARGV[0] eq "config" ) { + # Do the config step for each set of graphs + do_config_mem(); + do_config_cpu(); + do_config_load(); + do_config_uptime(); + do_config_xfer_by_device(); + do_config_xfer_by_uplink(); + do_config_xfer_by_port(); + do_config_xfer_by_network(); + do_config_xfer_by_radio(); + do_config_clients_by_device(); + do_config_clients_by_type(); + + # If dirtyconfig is not supported, or turned off, exit here. Otherwise, continue to fetch section + if ( !defined($ENV{'MUNIN_CAP_DIRTYCONFIG'}) || !$ENV{'MUNIN_CAP_DIRTYCONFIG'} ) { exit 0; } +} + +# Do the fetch step for each set of graphs +do_values_cpu(); +do_values_mem(); +do_values_load(); +do_values_uptime(); +do_values_xfer_by_device(); +do_values_xfer_by_uplink(); +do_values_xfer_by_port(); +do_values_xfer_by_network(); +do_values_xfer_by_radio(); +do_values_clients_by_device(); +do_values_clients_by_type(); + + + + + + + +####################### +# SUBROUTINES CONFIG # +####################### + +sub do_config_clients_by_type { + # Provide client count by type - CONFIG + if ( !$PluginConfig{'enable_clients_type'} ) { return 0; } + + graph_prologue( + 'unifi_clients_per_network', + 'Clients Connected / Network', + '-l 0 --base 1000', + 'clients', + 'network', + 'Clients connected per type - manually summing these numbers may be meaningful, as clients are often of multiple types' + ); + + foreach ( @{$Data{'typesOrder'}} ) { + print $_ , ".label " , $Data{'types'}{$_}[0] , "\n"; + } + + if ( ! $PluginConfig{'enable_detail_clients_type'} ) { return 1; } + + foreach ( @{$Data{'typesOrder'}} ) { + if ( $Data{'types'}{$_}[1] == 1 ) { + graph_prologue( + 'unifi_clients_per_network.' . $_, + 'Clients Connected : ' . $Data{'types'}{$_}[0], + '-l 0 --base 1000', + 'clients', + 'network', + 'Clients connected via that are of type: ' . $Data{'types'}{$_}[0] + ); + print "users.label Users\n"; + print "guests.label Guests\n"; + } + } + return 1; +} + +sub do_config_clients_by_device { + # Provide client count by device - CONFIG + if ( !$PluginConfig{'enable_clients_device'} ) { return 0; } + + graph_prologue( + 'unifi_clients_per_device', + 'Clients Connected / Device', + '-l 0 --base 1000', + 'clients', + 'network', + 'Clients connected to each unifi device' + ); + + foreach ( sort keys %{$Data{'device'}} ) { + print $_ , ".label " , $Data{'device'}{$_}->{'label'} , "\n"; + } + + if ( ! $PluginConfig{'enable_detail_clients_device'} ) { return 1; } + + foreach ( sort keys %{$Data{'device'}} ) { + graph_prologue( + 'unifi_clients_per_device.' . $_, + 'Clients / Device : ' . $Data{'device'}{$_}->{'label'}, + '-l 0 --base 1000', + 'clients', + 'network', + 'Clients connected to the ' . $Data{'device'}{$_}->{'label'} . " unifi device" + ); + print "users.label Users\n"; + print "guests.label Guests\n"; + } + return 1; +} + +sub do_config_xfer_by_radio { + # Provide transfer for radios - CONFIG + if ( !$PluginConfig{'enable_xfer_radio'} ) { return 0; } + + graph_prologue( + 'unifi_xfer_per_radio', + 'Transfer / radio', + '--base 1000', + 'Packets/${graph_period}', + 'network', + 'Number of packets transfered per individual radio band' + ); + + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$thisDevice}->{'type'} ne "uap" ) { next; } + + foreach ( @{$Data{'device'}{$thisDevice}{'radio'}} ) { + print $thisDevice , "_" , $_->{"name"} , "_pack.label " , $_->{"label"} , "\n"; + print $thisDevice , "_" , $_->{"name"} , "_pack.type DERIVE\n"; + print $thisDevice , "_" , $_->{"name"} , "_pack.min 0\n"; + } + } + + if ( ! $PluginConfig{'enable_detail_xfer_radio'} ) { return 1; } + + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$thisDevice}->{'type'} ne "uap" ) { next; } + + graph_prologue( + 'unifi_xfer_per_radio.' . $thisDevice, + 'Transfer / radio : ' . $Data{'device'}{$thisDevice}->{'name'}, + '--base 1000', + 'Packets/${graph_period}', + 'network', + 'Transfered Packets, Dropped / Retried Packets, and Error Packets for the WLAN device: ' . $Data{'device'}{$thisDevice}->{'name'} + ); + + foreach ( @{$Data{'device'}{$thisDevice}{'radio'}} ) { + print $_->{"name"} , "_pkt.label " , $_->{"type"} , " Packets\n"; + print $_->{"name"} , "_pkt.type DERIVE\n"; + print $_->{"name"} , "_pkt.min 0\n"; + print $_->{"name"} , "_dret.label " , $_->{"type"} , " Dropped / Retries\n"; + print $_->{"name"} , "_dret.type DERIVE\n"; + print $_->{"name"} , "_dret.min 0\n"; + print $_->{"name"} , "_err.label " , $_->{"type"} , " Errors\n"; + print $_->{"name"} , "_err.type DERIVE\n"; + print $_->{"name"} , "_err.min 0\n"; + } + } + return 1; +} + +sub do_config_xfer_by_network { + # Provide transfer for named networks - CONFIG + if ( !$PluginConfig{'enable_xfer_network'} ) { return 0; } + + graph_prologue( + 'unifi_xfer_per_network', + 'Transfer / named network', + '--base 1000', + 'Bytes/${graph_period} rcvd (-) / trans (+)', + 'network', + 'Bytes sent and received per each named network' + ); + + foreach my $thisNet ( sort keys %{$Data{'networks'}} ) { + foreach ( "_rxbytes", "_txbytes" ) { + print $thisNet , $_ , ".label " , $Data{'networks'}{$thisNet}->{"label"} . "\n"; + print $thisNet , $_ , ".type DERIVE\n"; + print $thisNet , $_ , ".min 0\n"; + } + print $thisNet , "_rxbytes.graph no\n"; + print $thisNet , "_txbytes.negative " , $thisNet , "_rxbytes\n"; + } + + if ( ! $PluginConfig{'enable_detail_xfer_network'} ) { return 1; } + + foreach my $thisNet ( sort keys %{$Data{'networks'}} ) { + graph_prologue( + 'unifi_xfer_per_network.' . $thisNet, + 'Transfer / named network : ' . $Data{'networks'}{$thisNet}->{'label'}, + '--base 1000', + 'Bytes/${graph_period} rcvd (-) / trans (+)', + 'network', + 'Bytes sent and received for the network named: ' . $Data{'networks'}{$thisNet}->{'label'} + ); + foreach ( "rxbyte", "txbyte" ) { + print $_ , ".label Bytes\n"; + print $_ , ".type DERIVE\n"; + print $_ , ".min 0\n"; + } + print "rxbyte.graph no\n"; + print "txbyte.negative rxbyte\n"; + } + return 1; +} + +sub do_config_xfer_by_port { + # Provide transfer for switch ports - CONFIG + if ( !$PluginConfig{'enable_xfer_port'} ) { return 0; } + + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$thisDevice}->{'type'} ne "usw" ) { next; } + graph_prologue( + 'unifi_xfer_per_port_' . $thisDevice, + 'Transfer / port : ' . $Data{'device'}{$thisDevice}->{'label'}, + '--base 1000', + 'Bytes/${graph_period} rcvd (-) / trans (+)', + 'network', + 'Bytes sent and received per port on the switch named: ' . $Data{'device'}{$thisDevice}->{'label'} + ); + foreach my $thisPort ( @{$Data{'device'}{$thisDevice}{'ports'}} ) { + foreach ( "_rxbytes", "_txbytes" ) { + print $thisDevice , "_" , $thisPort->{"name"} , $_ , ".label " , $thisPort->{"label"} . "\n"; + print $thisDevice , "_" , $thisPort->{"name"} , $_ , ".type DERIVE\n"; + print $thisDevice , "_" , $thisPort->{"name"} , $_ , ".min 0\n"; + } + print $thisDevice , "_" , $thisPort->{"name"} , "_rxbytes.graph no\n"; + print $thisDevice , "_" , $thisPort->{"name"} , "_txbytes.negative " , $thisDevice , "_" , $thisPort->{"name"} , "_rxbytes\n"; + } + } + + if ( ! $PluginConfig{'enable_detail_xfer_port'} ) { return 1; } + + # Extended graphs + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$thisDevice}->{'type'} ne "usw" ) { next; } + foreach my $thisPort ( @{$Data{'device'}{$thisDevice}{'ports'}} ) { + graph_prologue( + 'unifi_xfer_per_port_' . $thisDevice . "." . $thisPort->{'name'}, + 'Transfer / port : ' . $Data{'device'}{$thisDevice}->{'label'} . " : " . $thisPort->{'label'}, + '--base 1000', + 'Bytes/${graph_period} rcvd (-) / trans (+)', + 'network', + 'Bytes sent and received on port "' . $thisPort->{'label'} . '" of the switch "' . $Data{'device'}{$thisDevice}->{'label'} . '"' + ); + foreach ( "rxbyte", "txbyte" ) { + print $_ . ".label Bytes\n"; + print $_ . ".type DERIVE\n"; + print $_ . ".min 0\n"; + } + print "rxbyte.graph no\n"; + print "txbyte.negative rxbyte\n"; + } + } + return 1; +} + +sub do_config_xfer_by_uplink { + # Provide transfer for unifi uplink - CONFIG + if ( !$PluginConfig{'enable_xfer_device'} ) { return 0; } + + graph_prologue( + 'unifi_xfer_by_uplink', + 'Transfer on uplink : ' . $Data{'uplink'}{'devName'}, + '--base 1000', + 'Bytes/${graph_period} rcvd (-) / trans (+)', + 'network', + 'Bytes sent and received on the WAN port of the USG, and the speedtest result of the same port' + ); + + foreach ( "rx", "tx" ) { + print $_ , "_speed.label Speedtest\n"; + print $_ , "_bytes.label Transfered\n"; + print $_ , "_speed.type GAUGE\n"; + print $_ , "_bytes.type DERIVE\n"; + print $_ , "_speed.min 0\n"; + print $_ , "_bytes.min 0\n"; + } + + print "rx_speed.graph no\n"; + print "rx_bytes.graph no\n"; + print "tx_speed.negative rx_speed\n"; + print "tx_bytes.negative rx_bytes\n"; + + return 1; +} + +sub do_config_xfer_by_device { + # Provide transfer for each unifi device - CONFIG + if ( !$PluginConfig{'enable_xfer_device'} ) { return 0; } + + graph_prologue( + 'unifi_xfer_per_device', + 'Transfer / device', + '--base 1000', + 'Bytes/${graph_period} rcvd (-) / trans (+)', + 'network', + 'Bytes sent and received per unifi device' + ); + + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + foreach ( "_rxbytes", "_txbytes" ) { + print $thisDevice , $_ , ".label " , $Data{'device'}{$thisDevice}->{'label'} , "\n"; + print $thisDevice , $_ , ".type DERIVE\n"; + print $thisDevice , $_ , ".min 0\n"; + } + print $thisDevice , "_rxbytes.graph no\n"; + print $thisDevice , "_txbytes.negative " , $thisDevice , "_rxbytes\n"; + } + + if ( $PluginConfig{'enable_detail_xfer_device'} ) { + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + graph_prologue( + 'unifi_xfer_per_device.' . $thisDevice, + 'Transfer / device : ' . $Data{'device'}{$thisDevice}->{'label'}, + '--base 1000', + 'Bytes/${graph_period} rcvd (-) / trans (+)', + 'network', + 'Bytes sent and received on the unifi device named: ' . $Data{'device'}{$thisDevice}->{'label'} + ); + foreach ( "rxbyte", "txbyte" ) { + print $_ , ".label Bytes\n"; + print $_ , ".type DERIVE\n"; + print $_ , ".min 0\n"; + } + print "rxbyte.graph no\n"; + print "txbyte.negative rxbyte\n"; + } + } + return 1; +} + +sub do_config_uptime { + # Provide device uptime for each unifi device - CONFIG + if ( !$PluginConfig{'enable_device_uptime'} ) { return 0; } + graph_prologue( + 'unifi_device_uptime', + 'Uptime', + '--base 1000 -r --lower-limit 0', + 'days', + 'system', + 'Uptime in days for each unifi device' + ); + + foreach ( sort keys %{$Data{'device'}} ) { + print $_ , ".label " , $Data{'device'}{$_}->{"name"} , "\n"; + } + return 1; +} + +sub do_config_cpu { + # Provide device CPU usage for each unifi device - CONFIG + if ( !$PluginConfig{'enable_device_cpu'} ) { return 0; } + graph_prologue( + 'unifi_device_cpu', + 'CPU Usage', + '--base 1000 -r --lower-limit 0 --upper-limit 100', + '%', + 'system', + 'CPU usage as a percentage for each unifi device' + ); + + foreach ( sort keys %{$Data{'device'}} ) { + print $_ , ".label " , $Data{'device'}{$_}->{"name"} , "\n"; + } + return 1; +} + +sub do_config_load { + # Provide device load average for each unifi device - CONFIG + if ( !$PluginConfig{'enable_device_load'} ) { return 0; } + graph_prologue( + 'unifi_device_load', + 'Load Average', + '-l 0 --base 1000', + 'load', + 'system', + 'Load average for each unifi Access Point or Switch' + ); + + foreach ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$_}->{'type'} eq 'ugw' ) { next; } + print $_ , ".label " , $Data{'device'}{$_}->{"name"} , "\n"; + } + return 1; +} + +sub do_config_mem { + # Provice device memory usage for each unifi device - CONFIG + if ( !$PluginConfig{'enable_device_mem'} ) { return 0; } + graph_prologue( + 'unifi_device_mem', + 'Memory Usage', + '--base 1000 -r --lower-limit 0 --upper-limit 100', + '%', + 'system', + 'Memory usage as a percentage for each unifi device' + ); + + foreach ( sort keys %{$Data{'device'}} ) { + print $_ , ".label " , $Data{'device'}{$_}->{"name"} , "\n"; + } + return 1; +} + + + + + + + + + + +######################### +# SUBROUTINES VALUES # +######################### + +sub do_values_clients_by_type { + # Provide client count by type - VALUES + if ( !$PluginConfig{'enable_clients_type'} ) { return 0; } + + print "multigraph unifi_clients_per_network\n"; + + foreach ( @{$Data{'typesOrder'}} ) { + print $_ , ".value " , ( $Data{'types'}{$_}[2] + $Data{'types'}{$_}[3] ) , "\n"; + } + + if ( ! $PluginConfig{'enable_detail_clients_type'} ) { return 1; } + + foreach ( @{$Data{'typesOrder'}} ) { + if ( $Data{'types'}{$_}[1] == 1 ) { + print "multigraph unifi_clients_per_network.$_\n"; + print "users.value " , $Data{'types'}{$_}[2] , "\n"; + print "guests.value " , $Data{'types'}{$_}[3] , "\n"; + } + } + return 1; +} + +sub do_values_clients_by_device { + # Provide client count by device - VALUES + if ( !$PluginConfig{'enable_clients_device'} ) { return 0; } + + print "multigraph unifi_clients_per_device\n"; + + foreach ( sort keys %{$Data{'device'}} ) { + print $_ , ".value " , $Data{'device'}{$_}->{'clients'} , "\n"; + } + + if ( ! $PluginConfig{'enable_detail_clients_device'} ) { return 1; } + + foreach ( sort keys %{$Data{'device'}} ) { + print "multigraph unifi_clients_per_device.$_\n"; + print "users.value " , $Data{'device'}{$_}->{'users'} , "\n"; + print "guests.value " , $Data{'device'}{$_}->{'guests'} , "\n"; + } + return 1; +} + +sub do_values_xfer_by_radio { + # Provide transfer for radios - VALUES + if ( !$PluginConfig{'enable_xfer_radio'} ) { return 0; } + + print "multigraph unifi_xfer_per_radio\n"; + + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$thisDevice}->{'type'} ne "uap" ) { next; } + + foreach ( @{$Data{'device'}{$thisDevice}{'radio'}} ) { + print $thisDevice , "_" , $_->{"name"} , "_pack.value " , $_->{"pckt"} , "\n";; + } + } + + if ( ! $PluginConfig{'enable_detail_xfer_radio'} ) { return 1; } + + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$thisDevice}->{'type'} ne "uap" ) { next; } + + print "multigraph unifi_xfer_per_radio.$thisDevice\n"; + + foreach ( @{$Data{'device'}{$thisDevice}{'radio'}} ) { + print $_->{"name"} , "_pkt.value " , $_->{"pckt"} , "\n"; + print $_->{"name"} , "_dret.value " , $_->{"dret"} , "\n"; + print $_->{"name"} , "_err.value " , $_->{"err"} , "\n"; + } + } + return 1; +} + +sub do_values_xfer_by_network { + # Provide transfer for named networks - CONFIG + if ( !$PluginConfig{'enable_xfer_network'} ) { return 0; } + + print "multigraph unifi_xfer_per_network\n"; + + foreach my $thisNet ( sort keys %{$Data{'networks'}} ) { + print $thisNet , "_rxbytes.value " , $Data{'networks'}{$thisNet}->{"rx"} , "\n"; + print $thisNet , "_txbytes.value " , $Data{'networks'}{$thisNet}->{"tx"} , "\n"; + } + + if ( ! $PluginConfig{'enable_detail_xfer_network'} ) { return 1; } + + foreach my $thisNet ( sort keys %{$Data{'networks'}} ) { + print "multigraph unifi_xfer_per_network.$thisNet\n"; + print "rxbyte.value " , $Data{'networks'}{$thisNet}->{"rx"} , "\n"; + print "txbyte.value " , $Data{'networks'}{$thisNet}->{"tx"} , "\n"; + } + return 1; +} + +sub do_values_xfer_by_port { + # Provide transfer for switch ports - VALUES + if ( !$PluginConfig{'enable_xfer_port'} ) { return 0; } + + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$thisDevice}->{'type'} ne "usw" ) { next; } + print "multigraph unifi_xfer_per_port_$thisDevice\n"; + + foreach ( @{$Data{'device'}{$thisDevice}{'ports'}} ) { + print $thisDevice , "_" , $_->{"name"} , "_rxbytes.value " , $_->{"rx"} , "\n"; + print $thisDevice , "_" , $_->{"name"} , "_txbytes.value " , $_->{"tx"} , "\n"; + } + } + + if ( ! $PluginConfig{'enable_detail_xfer_port'} ) { return 1; } + + # Extended graphs + foreach my $thisDevice ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$thisDevice}->{'type'} ne "usw" ) { next; } + foreach ( @{$Data{'device'}{$thisDevice}{'ports'}} ) { + print 'multigraph unifi_xfer_per_port_' . $thisDevice . "." . $_->{'name'} . "\n"; + print "rxbyte.value " , $_->{"rx"} , "\n"; + print "txbyte.value " , $_->{"tx"} , "\n"; + } + } + return 1; +} + +sub do_values_xfer_by_uplink { + # Provide transfer for unifi uplink - CONFIG + if ( !$PluginConfig{'enable_xfer_device'} ) { return 0; } + + print "multigraph unifi_xfer_by_uplink\n"; + print "rx_speed.value " . $Data{'uplink'}{"rx_speed"} . "\n"; + print "tx_speed.value " . $Data{'uplink'}{"tx_speed"} . "\n"; + print "rx_bytes.value " . $Data{'uplink'}{"rx_bytes"} . "\n"; + print "tx_bytes.value " . $Data{'uplink'}{"tx_bytes"} . "\n"; + return 1; +} + +sub do_values_xfer_by_device { + # Provide transfer for each unifi device - CONFIG + if ( !$PluginConfig{'enable_xfer_device'} ) { return 0; } + + print "multigraph unifi_xfer_per_device\n"; + foreach ( sort keys %{$Data{'device'}} ) { + print $_ . "_rxbytes.value " . $Data{'device'}{$_}->{"rx"} , "\n"; + print $_ . "_txbytes.value " . $Data{'device'}{$_}->{"tx"} , "\n"; + } + if ( $PluginConfig{'enable_detail_xfer_device'} ) { + foreach ( sort keys %{$Data{'device'}} ) { + print "multigraph unifi_xfer_per_device." , $_ , "\n"; + print "rxbyte.value " , $Data{'device'}{$_}->{"rx"} , "\n"; + print "txbyte.value " , $Data{'device'}{$_}->{"tx"} , "\n"; + } + } + return 1; +} + +sub do_values_cpu { + # Provide device CPU usage for each unifi device - VALUES + if ( !$PluginConfig{'enable_device_cpu'} ) { return 0; } + + print "multigraph unifi_device_cpu\n"; + foreach ( sort keys %{$Data{'device'}} ) { + print $_ , ".value " , ( $Data{'device'}{$_}->{"cpu"} ) , "\n"; + } + return 1; +} + +sub do_values_mem { + # Provice device memory usage for each unifi device - VALUES + if ( !$PluginConfig{'enable_device_mem'} ) { return 0; } + + print "multigraph unifi_device_mem\n"; + foreach ( sort keys %{$Data{'device'}} ) { + print $_ , ".value " , ( $Data{'device'}{$_}->{"mem"} ) , "\n"; + } + return 1; +} + +sub do_values_load { + # Provide device load average for each unifi device - VALUES + if ( !$PluginConfig{'enable_device_load'} ) { return 0; } + + print "multigraph unifi_device_load\n"; + foreach ( sort keys %{$Data{'device'}} ) { + if ( $Data{'device'}{$_}->{'type'} eq 'ugw' ) { next; } + print $_ , ".value " , ( $Data{'device'}{$_}->{"load"} ) , "\n"; + } + return 1; +} + +sub do_values_uptime { + # Provide device uptime for each unifi device - VALUES + if ( !$PluginConfig{'enable_device_uptime'} ) { return 0; } + + print "multigraph unifi_device_uptime\n"; + foreach ( sort keys %{$Data{'device'}} ) { + print $_ , ".value " , ( $Data{'device'}{$_}->{"uptime"} / 86400 ) , "\n"; + } + return 1; +} + + + + + + + +######################### +# SUBROUTINES GENERAL # +######################### + +sub graph_prologue { + # Generate graph prologues - slightly less copy-pasta, and less chance for things to go wrong + my ( $id, $title, $args, $vlabel, $category, $info ) = (@_); + + print "multigraph $id\n"; + print 'graph_title ' , $title , ' : ' , $APIconfig{"name"} , "\n"; + print "graph_args $args\n"; + print "graph_vlabel $vlabel\n"; + if ( $PluginConfig{'force_category'} ) { + print "graph_category ", $PluginConfig{'force_category'}, "\n"; + } else { + print "graph_category $category\n"; + } + if ( $info ) { + print 'graph_info For the unifi site named "' , $APIconfig{"name"} , "\", $info\n"; + } + return 1; +} + +# Collate all collected data into something we can use. +sub make_data { + foreach my $thisDevice ( @{$APIJsonResponse{'device'}->{'data'}} ) { + # Grab everything we care to know about each device. + $Data{'device'}{ make_safe($thisDevice->{'name'}, $thisDevice->{'serial'}) } = { + 'label' => $thisDevice->{'name'}, + 'users' => ($thisDevice->{'user-num_sta'} || 0), + 'guests' => ($thisDevice->{'guest-num_sta'} || 0), + 'clients' => ($thisDevice->{'user-num_sta'} + $thisDevice->{'guest-num_sta'} || 0), + 'tx' => $thisDevice->{'rx_bytes'}, + 'rx' => $thisDevice->{'tx_bytes'}, + 'name' => $thisDevice->{'name'}, + 'uptime' => $thisDevice->{'uptime'}, + 'cpu' => $thisDevice->{'system-stats'}->{'cpu'}, + 'mem' => $thisDevice->{'system-stats'}->{'mem'}, + 'load' => ( $thisDevice->{'type'} eq 'ugw' ? 'U' : $thisDevice->{'sys_stats'}->{'loadavg_1'} ), + 'type' => $thisDevice->{'type'} + }; + + if ( $thisDevice->{'type'} eq 'ugw' ) { # Handle firewall specially, record uplink and networks + foreach my $thisNet ( @{$thisDevice->{'network_table'}} ) { + $Data{'networks'}{ make_safe($thisNet->{'name'}, $thisNet->{'_id'} ) } = { + 'label' => $thisNet->{'name'}, + 'tx' => $thisNet->{'tx_bytes'}, + 'rx' => $thisNet->{'rx_bytes'} + } + } + + $Data{'uplink'}{'devName'} = $thisDevice->{'name'}; + $Data{'uplink'}{'rx_speed'} = $thisDevice->{'speedtest-status'}->{'xput_download'} * 1000000; + $Data{'uplink'}{'tx_speed'} = $thisDevice->{'speedtest-status'}->{'xput_upload'} * 1000000; + + foreach ( @{$thisDevice->{"port_table"}} ) { + if ( $_->{name} eq "wan" ) { + $Data{'uplink'}{'rx_bytes'} = $_->{'rx_bytes'}; + $Data{'uplink'}{'tx_bytes'} = $_->{'tx_bytes'}; + } + } + } + + if ( $thisDevice->{'type'} eq 'usw' ) { # Handle swiches specially - record port stats + my @port_list; + + foreach my $port ( @{$thisDevice->{'port_table'}} ) { + if ( !$PluginConfig{'hide_empty_xfer_port'} || $port->{'up'} ) { + push @port_list , { + 'name' => 'port_' . zPad($port->{'port_idx'}), + 'label' => zPad($port->{'port_idx'}) . '-' . $port->{'name'}, + 'rx' => $port->{'rx_bytes'}, + 'tx' => $port->{'tx_bytes'} + }; + } + } + $Data{'device'}{ make_safe($thisDevice->{'name'}, $thisDevice->{'serial'}) }{'ports'} = \@port_list; + } + + if ( $thisDevice->{'type'} eq 'uap' ) { # Handle APS specially - record radio stats + my @theseRadios; + + foreach my $thisRadio ( @{$thisDevice->{'radio_table_stats'}} ) { + my $name = make_safe( $thisRadio->{'name'}, "" ); + my $label = ( $thisRadio->{'channel'} < 12 ) ? '2.4Ghz' : '5Ghz'; + + $_ = $thisDevice->{'stat'}; + + push @theseRadios, { + 'name' => $name, + 'label' => $label . '-' . $thisDevice->{'name'}, + 'pckt' => $_->{$name . '-rx_packets'} + $_->{$name . '-tx_packets'}, + 'dret' => $_->{$name . '-rx_dropped'} + $_->{$name . '-tx_retries'} + $_->{$name . '-tx_dropped'}, + 'err' => $_->{$name . '-rx_errors'} + $_->{$name . '-tx_errors'}, + 'type' => $label + }; + } + $Data{'device'}{ make_safe($thisDevice->{'name'}, $thisDevice->{'serial'}) }{'radio'} = \@theseRadios; + } + } # END PROCESSING OF DEVICE DATA + + + # PROCESS NETWORK TYPE DATA + + # -> UNLESS, type graph is disabled. + # + # WHY: if the client list is large (huge. 10,000+), this is CPU intensive + if ( !$PluginConfig{'enable_clients_type'} ) { return 1; } + + $Data{'types'} = { + "wired" => ["Wired Connection", 1, 0, 0], + "wifi" => ["Wireless Connection", 1, 0, 0], + "tuser" => ["Total Users", 0, 0, 0], + "tguest" => ["Total Guests", 0, 0, 0], + "authed" => ["Authorized Guests", 0, 0, 0], + "unauth" => ["Unauthorized Guests", 0, 0, 0], + }; + + $Data{'typesOrder'} = ( $PluginConfig{'show_authorized_clients_type'} ) ? + [ "wired", "wifi", "tuser", "tguest", "authed", "unauth"] : + [ "wired", "wifi", "tuser", "tguest" ]; + + + my @wlans; + + foreach my $thisNet ( @{$APIJsonResponse{'wlan'}->{'data'}} ) { + $Data{'types'}{ make_safe($thisNet->{'name'}, "") } = [ $thisNet->{'name'}, 1, 0, 0 ]; + push @wlans, make_safe($thisNet->{'name'}, ""); + } + + foreach ( sort @wlans ) { + push @{$Data{'typesOrder'}}, $_; + } + + foreach my $client ( @{$APIJsonResponse{'sta'}->{'data'}} ) { + if ( $client->{"is_wired"} ) { + if ( $client->{"is_guest"} ) { + $Data{'types'}->{'wired'}[3]++; + $Data{'types'}->{'guest'}[3]++; + } else { + $Data{'types'}->{'wired'}[2]++; + $Data{'types'}->{'user'}[2]++; + } + } else { + if ( $client->{"is_guest"} ) { + $Data{'types'}->{make_safe($client->{"essid"}, "")}[3]++; + $Data{'types'}->{'wifi'}[3]++; + $Data{'types'}->{'guest'}[3]++; + if ( $client->{"authorized"} ) { + $Data{'types'}->{'authed'}[3]++; + } else { + $Data{'types'}->{'unauth'}[3]++; + } + } else { + $Data{'types'}->{make_safe($client->{"essid"}, "")}[2]++; + $Data{'types'}->{'wifi'}[2]++; + $Data{'types'}->{'user'}[2]++; + } + } + } + + return 1; +} + + +sub fetch_data { + # Set up curl, and login to API + $curl->setopt($curl->CURLOPT_POST,1); + $curl->setopt($curl->CURLOPT_COOKIEFILE,""); # Session only cookie + $curl->setopt($curl->CURLOPT_SSL_VERIFYPEER, (( $APIconfig{"ssl_verify_peer"} =~ m/no/i ) ? 0 : 1) ); + $curl->setopt($curl->CURLOPT_SSL_VERIFYHOST, (( $APIconfig{"ssl_verify_host"} =~ m/no/i ) ? 0 : 2) ); + $curl->setopt($curl->CURL_SSLVERSION_TLSv1, 1); + $curl->setopt($curl->CURLOPT_URL, $APIPoint{'login'}); + $curl->setopt($curl->CURLOPT_POSTFIELDS, q[{'username':'] . $APIconfig{"user"} . q[', 'password':'] . $APIconfig{"pass"} . q['}] ); + $curl->setopt($curl->CURLOPT_WRITEDATA, \$APIResponse{'login'}); + $retcode = $curl->perform; + + if ( $retcode != 0 ) { + die "FATAL:$me: Unable to connect to API: " . $curl->strerror($retcode) . " " . $curl->errbuf . "\n"; + } + + $APIJsonResponse{'login'} = $jsonOBJ->allow_nonref->utf8->relaxed->decode($APIResponse{'login'}); + + if ( $APIJsonResponse{'login'}->{'meta'}->{'rc'} ne 'ok' ) { + die "FATAL:$me: Unable to login to API - it said: " , $APIJsonResponse{'login'}->{'meta'}->{'msg'} , "\n"; + } + + # Change method to GET + $curl->setopt($curl->CURLOPT_HTTPGET,1); + + + # Get some API data. + + # Device data + $curl->setopt($curl->CURLOPT_WRITEDATA, \$APIResponse{'device'}); + $curl->setopt($curl->CURLOPT_URL, $APIPoint{'device'}); + $retcode = $curl->perform; + + if ( $retcode != 0 ) { + die "FATAL:$me: Unable to connect to API: " . $curl->strerror($retcode) . " " . $curl->errbuf . "\n"; + } + + $APIJsonResponse{'device'} = $jsonOBJ->allow_nonref->utf8->relaxed->decode($APIResponse{'device'}); + + if ( $APIJsonResponse{'device'}->{'meta'}->{'rc'} ne 'ok' ) { + die "FATAL:$me: Unable get device data from API - it said: " , $APIJsonResponse{'device'}->{'meta'}->{'msg'} , "\n"; + } + + # STA (client) data + $curl->setopt($curl->CURLOPT_WRITEDATA, \$APIResponse{'sta'}); + $curl->setopt($curl->CURLOPT_URL, $APIPoint{'sta'}); + $retcode = $curl->perform; + + if ( $retcode != 0 ) { + die "FATAL:$me: Unable to connect to API: " . $curl->strerror($retcode) . " " . $curl->errbuf . "\n"; + } + + $APIJsonResponse{'sta'} = $jsonOBJ->allow_nonref->utf8->relaxed->decode($APIResponse{'sta'}); + + if ( $APIJsonResponse{'sta'}->{'meta'}->{'rc'} ne 'ok' ) { + die "FATAL:$me: Unable get sta data from API - it said: " , $APIJsonResponse{'sta'}->{'meta'}->{'msg'} , "\n"; + } + + # WLAN data + $curl->setopt($curl->CURLOPT_WRITEDATA, \$APIResponse{'wlan'}); + $curl->setopt($curl->CURLOPT_URL, $APIPoint{'wlan'}); + $retcode = $curl->perform; + + if ( $retcode != 0 ) { + die "FATAL:$me: Unable to connect to API: " . $curl->strerror($retcode) . " " . $curl->errbuf . "\n"; + } + + $APIJsonResponse{'wlan'} = $jsonOBJ->allow_nonref->utf8->relaxed->decode($APIResponse{'wlan'}); + + if ( $APIJsonResponse{'wlan'}->{'meta'}->{'rc'} ne 'ok' ) { + die "FATAL:$me: Unable get wlan data from API - it said: " , $APIJsonResponse{'wlan'}->{'meta'}->{'msg'} , "\n"; + } +} + +# Make field names safe, and lowercase. +# +# Typically, $extraName should be the MAC address of the unique ID identifier as the unifi +# controller software does not enforce that device names or network names are unique. +sub make_safe { + my ( $name, $extraName ) = ( @_ ); + if ( $extraName ne "" ) { + return clean_fieldname(lc($name) . "_" . $extraName); + } else { + return lc(clean_fieldname($name)); + } +} + +# Get a default from an enviromental variable - return text +# +# env_default(, ) +sub env_default_text { + my ( $env_var, $default ) = (@_); + return ( ( defined $ENV{$env_var} ) ? $ENV{$env_var} : $default ), +} + +# Get a default from an enviromental variable - boolean true +# +# env_default_bool_true (, ) +sub env_default_bool_true { + my $env_var = $_[0]; + return ( ( defined $ENV{$env_var} && $ENV{$env_var} =~ m/no/i ) ? 0 : 1 ); +} + +# Quick 2 digit zero pad +sub zPad { return sprintf("%02d", $_[0]); } \ No newline at end of file