Kako stvoriti Slack dodatak u Javi

Java Top

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Uvod

Slack je popularan chat sustav koji koriste ljudi i tvrtke širom svijeta. Jedna od stvari koja ga čini toliko popularnim je sposobnost pisanja vlastitih prilagođenih dodataka koji mogu komunicirati s ljudima i kanalima u samo jednom zaostatku. Ovo koristi njihov HTTP API.

Slack ne nudi službeni SDK za pisanje dodataka s Javom. Međutim, službeno je odobren SDK zajednice koji ćemo koristiti. To nam daje pristup gotovo svim Slack API-ima iz Java kode, bez potrebe da se bavimo točnim detaljima API-ja.

Ovo ćemo iskoristiti za izgradnju malog bota za nadzor sustava. Ovo će povremeno dohvaćati prostor na disku za lokalno računalo i upozoravati ljude ako se bilo koji pogon pretrpa.

2. Dobivanje vjerodajnica za API

Prije nego što možemo bilo što učiniti sa Slackom, moramo stvorite novu aplikaciju i bota i povežite je s našim kanalima.

Prvo, posjetimo //api.slack.com/apps. Ovo je osnova odakle upravljamo našim Slack aplikacijama. Odavde možemo stvoriti novu aplikaciju.

Kada to učinimo, moramo unijeti naziv aplikacije i Slack radni prostor u kojem ćemo je stvoriti.

Nakon što to učinimo, aplikacija je stvorena i spremna je za rad s njom. Sljedeći zaslon omogućuje nam stvaranje bota. Ovo je lažni korisnik prema kojem će se dodatak ponašati.

Kao i svakom normalnom korisniku, i ovome moramo dati ime za prikaz i korisničko ime. Ovo su postavke koje će drugi korisnici u radnom prostoru Slack vidjeti za ovog korisnika bota ako ikad komuniciraju s njim.

Sad kad smo to učinili, na bočnom izborniku možemo odabrati "Install App" i dodajte aplikaciju u naš Slack radni prostor. Nakon što to učinimo, aplikacija može komunicirati s našim radnim prostorom.

To će nam dati žetone potrebne za komunikaciju našeg dodatka sa Slackom.

Svaki bot u interakciji s različitim Slack radnim prostorom imat će drugačiji skup tokena. Naša aplikacija treba vrijednost "Bot User OAuth Access Token" za vrijeme pokretanja.

Napokon, trebamo pozovite bota na bilo koji kanal na kojem bi trebao biti uključen. To funkcionira jednostavnim slanjem poruke s kanala - @sustav_monitoring u ovom slučaju.

3. Dodavanje mlitavosti našem projektu

Prije nego što ga možemo koristiti, prvo moramo dodati ovisnosti Slack SDK-a u našu pom.xml datoteka:

 com.hubspot.slack slack-base $ {slack.version} com.hubspot.slack slack-java-client $ {slack.version} 

3. Struktura primjene

Srž naše aplikacije je mogućnost provjere grešaka u sustavu. To ćemo predstaviti konceptom programa za provjeru pogrešaka. Ovo je jednostavno sučelje s jednom metodom, pokrenuto radi provjere pogrešaka i prijavljivanja istih:

javno sučelje ErrorChecker {void check (); }

Također želimo imati sredstva za prijavljivanje svih pronađenih pogrešaka. Ovo je još jedno jednostavno sučelje koje će uzeti iskaz problema i prijaviti ga na odgovarajući način:

javno sučelje ErrorReporter {void reportProblem (problem sa nizom); }

Korištenje sučelja ovdje omogućuje nam različite načine prijavljivanja problema. Na primjer, možda imamo onu koja šalje e-poštu, kontaktira sustav izvještavanja o pogreškama ili šalje poruke našem Slack sustavu da bi ljudi odmah dobili obavijest.

Dizajn koji stoji iza ovoga je da svaki Provjera pogrešaka instanca dobiva svoju ErrorReporter koristiti. To nam daje fleksibilnost da imamo različite izvještače o pogreškama koje mogu koristiti različite dame, jer neke pogreške mogu biti važnije od drugih. Na primjer, ako su diskovi puni preko 90%, što može zahtijevati poruku Slack kanalu, ali ako su pune više od 98%, umjesto toga bismo možda umjesto toga željeli poslati privatne poruke određenim ljudima.

4. Provjera prostora na disku

Naš alat za provjeru pogrešaka provjerit će količinu prostora na disku na lokalnom sustavu. Bilo koji datotečni sustav s manje od određenog postotka smatra se pogreškom i bit će prijavljen kao takav.

Iskoristit ćemo NIO2 FileStore API uveden u Javi 7 za dobivanje ovih podataka na više platformi.

Pogledajmo sada naš program za provjeru pogrešaka:

javna klasa DiskSpaceErrorChecker implementira ErrorChecker {private static final Logger LOG = LoggerFactory.getLogger (DiskSpaceErrorChecker.class); privatni ErrorReporter errorReporter; privatno dvostruko ograničenje; javni DiskSpaceErrorChecker (ErrorReporter errorReporter, dvostruko ograničenje) {this.errorReporter = errorReporter; this.limit = limit; } @Override public void check () {FileSystems.getDefault (). GetFileStores (). ForEach (fileStore -> {try {long totalSpace = fileStore.getTotalSpace (); long usableSpace = fileStore.getUsableSpace (); double usablePercentage = (( double) usableSpace) / totalSpace; if (totalSpace> 0 && usablePercentage <limit) {String error = String.format ("Skladište datoteka% s ima samo% d %% korisnog prostora na disku", fileStore.name (), (int) (usablePercentage * 100)); errorReporter.reportProblem (pogreška);}} catch (IOException e) {LOG.error ("Pogreška pri dobivanju prostora na disku za pohranu datoteka {}", fileStore, e);}}); }}

Ovdje dobivamo popis svih spremišta datoteka na lokalnom sustavu, a zatim provjeravamo svaku pojedinačno. Svatko tko ima manje od definiranog ograničenja kao korisni prostor generirat će pogrešku pomoću našeg izvještaja o pogreškama.

5. Slanje pogrešaka na Slack kanale

Sada moramo biti u mogućnosti prijaviti svoje pogreške. Naš prvi izvjestitelj bit će onaj koji šalje poruke na Slack kanal. To omogućuje svima na kanalu da vide poruku u nadi da će netko reagirati na nju.

Ovo koristi a SlackClient, iz Slack SDK-a i naziv kanala na koji će se poruke slati. Također provodi naše ErrorReporter sučelje tako da ga možemo lako priključiti u bilo koji program za provjeru pogrešaka koji ga želi koristiti:

javna klasa SlackChannelErrorReporter implementira ErrorReporter {private SlackClient slackClient; privatni kanal String; javni SlackChannelErrorReporter (SlackClient slackClient, kanal niza) {this.slackClient = slackClient; this.channel = channel; } @Override public void reportProblem (problem sa nizom) {slackClient.postMessage (ChatPostMessageParams.builder () .setText (problem) .setChannelId (channel) .build ()) .join (). UnsrapOrElseThrow (); }}

6. Ožičenje aplikacije

Sada smo u mogućnosti povezati aplikaciju i omogućiti joj da nadgleda naš sustav. Radi ovog vodiča koristit ćemo Javu Tajmer i Zadatak odbrojavanja koji su dio jezgre JVM-a, ali mogli bismo jednako lako koristiti Spring ili bilo koji drugi okvir za izgradnju.

Za sada će ovo imati jedan DiskSpaceErrorChecker koji prijavljuje sve diskove koji su ispod 10% korisni za naš "opći" kanal i koji se pokreće svakih 5 minuta:

javna klasa MainClass {javni statički final long MINUTES = 1000 * 60; javna statička void glavna (String [] args) baca IOException {SlackClientRuntimeConfig runtimeConfig = SlackClientRuntimeConfig.builder () .setTokenSupplier (() -> "") .build (); SlackClient slackClient = SlackClientFactory.defaultFactory (). Build (runtimeConfig); ErrorReporter slackChannelErrorReporter = novi SlackChannelErrorReporter (slackClient, "general"); ErrorChecker diskSpaceErrorChecker10pct = novi DiskSpaceErrorChecker (slackChannelErrorReporter, 0,1); Timer timer = novi Timer (); timer.scheduleAtFixedRate (novi TimerTask () {@Preuzmi javno void vođenje () {diskSpaceErrorChecker10pct.check ();}}, 0, 5 * MINUTA); }}

Moramo zamijeniti "" tokenom koji je ranije dobiven, a zatim smo spremni za pokretanje. Čim to učinimo, ako je sve točno, naš će dodatak provjeriti lokalne pogone i poslati poruku Slack ako postoje pogreške.

7. Slanje pogrešaka kao privatnih poruka

Zatim ćemo dodati izvještaja o pogreškama koji umjesto toga šalje privatne poruke. To može biti korisno za hitnije pogreške jer hoće odmah pinga određenog korisnika umjesto da se oslanjate na to da će netko na kanalu reagirati.

Naš izvjestitelj o pogreškama ovdje je složeniji jer mora komunicirati s jednim ciljanim korisnikom:

javna klasa SlackUserErrorReporter implementira ErrorReporter {private SlackClient slackClient; privatni korisnik niza; javni SlackUserErrorReporter (SlackClient slackClient, korisnik niza) {this.slackClient = slackClient; this.user = korisnik; } @Override public void reportProblem (problem sa nizom) {UsersInfoResponse usersInfoResponse = slackClient .lookupUserByEmail (UserEmailParams.builder () .setEmail (user) .build ()) .join (). UnrapOrElseThrow (); ImOpenResponse imOpenResponse = slackClient.openIm (ImOpenParams.builder () .setUserId (usersInfoResponse.getUser (). GetId ()) .build ()) .join (). UnsrapOrElseThrow (); imOpenResponse.getChannel (). ifPresent (channel -> {slackClient.postMessage (ChatPostMessageParams.builder () .setText (problem) .setChannelId (channel.getId ()) .build ()) .join (). UnrapOrElseThrow ();} ); }}

Ono što ovdje moramo učiniti je pronaći korisnika kojem razmjenjujemo poruke - potražen po adresi e-pošte, jer je to jedina stvar koju se ne može promijeniti. Sljedeći, korisniku otvorimo IM kanal, a zatim na taj kanal objavimo svoju poruku o pogrešci.

To se zatim može povezati u glavni metodom, a mi ćemo upozoriti jednog korisnika izravno:

ErrorReporter slackUserErrorReporter = novi SlackUserErrorReporter (slackClient, "[e-pošta zaštićena]"); ErrorChecker diskSpaceErrorChecker2pct = novi DiskSpaceErrorChecker (slackUserErrorReporter, 0,02); timer.scheduleAtFixedRate (novi TimerTask () {@Preuzmi javno void vođenje () {diskSpaceErrorChecker2pct.check ();}}, 0, 5 * MINUTA);

Kad završimo, to možemo pokrenuti i dobiti privatne poruke i za pogreške.

8. Zaključak

Ovdje smo vidjeli kako možemo uključiti Slack u svoj alat tako da povratne informacije šalju ili cijelom timu ili pojedinačnim članovima. Puno više možemo učiniti s Slack API-om, pa zašto ne bismo vidjeli što još možemo uključiti.

Kao i obično, izvorni kod za ovaj članak može se naći na GitHubu.

Dno Java

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

$config[zx-auto] not found$config[zx-overlay] not found