Hogyan készítsünk egy laza bővítményt a Java-ban

Java Top

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Bemutatkozás

A Slack egy népszerű csevegőrendszer, amelyet emberek és vállalatok használnak a világ minden tájáról. Az egyik dolog, ami annyira népszerűvé teszi, az a képesség, hogy megírhatjuk saját egyéni pluginjeinket, amelyek egyetlen lazításon belül kölcsönhatásba léphetnek emberekkel és csatornákkal. Ez a HTTP API-jukat használja.

A Slack nem kínál hivatalos SDK-t bővítmények Java-ra történő írásához. Van azonban egy hivatalosan jóváhagyott közösségi SDK, amelyet használni fogunk. Ez hozzáférést biztosít számunkra a Slack API szinte egészéhez egy Java kódbázisról anélkül, hogy az API pontos részleteivel kellene foglalkoznunk.

Ezt felhasználjuk egy kis rendszerfigyelő bot felépítéséhez. Ez időnként lekéri a lemezterületet a helyi számítógép számára, és figyelmezteti az embereket, ha bármely meghajtó túlságosan megtelik.

2. API hitelesítő adatok beszerzése

Mielőtt bármit megtehetnénk a Slack-kel, meg kell tennünk hozzon létre egy új alkalmazást és egy botot, és csatlakoztassa a csatornáinkhoz.

Először keressük fel a //api.slack.com/apps webhelyet. Ez az az alap, ahonnan a Slack alkalmazásokat kezeljük. Innen létrehozhatunk egy új alkalmazást.

Amikor ezt megtesszük, meg kell adnunk az alkalmazás nevét és egy Slack munkaterületet a létrehozáshoz.

Miután ezt megtettük, az alkalmazás létrejött, és készen áll arra, hogy együtt dolgozzunk vele. A következő képernyőn Botot hozhatunk létre. Ez egy hamis felhasználó, akinek a plugin így fog viselkedni.

Mint minden normál felhasználónál, itt is meg kell adnunk egy megjelenítõ nevet és egy felhasználónévet. Ezeket a beállításokat látja a Slack munkaterület többi felhasználója ennek a bot felhasználónak, ha valaha is interakcióba lépnek vele.

Most, hogy ezt megtettük, kiválaszthatjuk az „Install Install” lehetőséget az oldalsó menüből és adja hozzá az alkalmazást a Slack munkaterületünkhöz. Miután ezt megtettük, az alkalmazás kölcsönhatásba léphet a munkaterületünkkel.

Ezután megkapjuk azokat a jelzéseket, amelyekre szükségünk van ahhoz, hogy a bővítményünk kommunikáljon a Slack-kel.

Minden botnak, amely egy másik Slack munkaterülettel lép kapcsolatba, különböző tokenek lesznek. Alkalmazásunknak szüksége van a „Bot User OAuth Access Token” értékre, amikor futtatjuk.

Végül meg kell hívja meg a botot minden olyan csatornára, amelyben részt kell vennie. Ez úgy működik, hogy egyszerűen üzenetet küld a csatornáról - @ rendszer_monitoring ebben az esetben.

3. A Slack hozzáadása a projektünkhöz

Mielőtt használhatnánk, először hozzá kell adnunk a Slack SDK függőségeket a sajátunkhoz pom.xml fájl:

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

3. Alkalmazás felépítése

Alkalmazásunk lényege a rendszer hibáinak ellenőrzése. Ezt a Hibaellenőrző koncepcióval fogjuk képviselni. Ez egy egyszerű felület, egyetlen módszerrel, amelynek célja a hibák ellenőrzése és azok jelentése:

nyilvános felület ErrorChecker {void check (); }

Azt is szeretnénk, hogy rendelkezésünkre álljanak minden talált hibáról. Ez egy másik egyszerű felület, amely problémamegállapítást készít és megfelelően beszámol róla:

nyilvános felület ErrorReporter {void reportProblem (String probléma); }

Egy felület használata itt lehetővé teszi számunkra, hogy különböző módon tudjunk jelenteni a problémákról. Például lehet, hogy van olyan, amely e-maileket küld, hibajelentési rendszerrel lép kapcsolatba, vagy üzeneteket küld a Slack rendszerünkbe, hogy az emberek azonnali értesítést kapjanak.

Ennek hátterében az áll, hogy mindegyik ErrorChecker példány megkapja a sajátját ErrorReporter használni. Ez lehetővé teszi számunkra, hogy különböző hibajelentőket használjunk a különböző ellenőrök számára, mert egyes hibák fontosabbak lehetnek, mint mások. Például, ha a lemezek meghaladják a 90% -ot, ezért üzenetet igényelhet a Slack csatornára, de ha a 98% feletti, akkor inkább privát üzeneteket szeretnénk küldeni bizonyos embereknek.

4. A lemezterület ellenőrzése

Hibaellenőrzőnk ellenőrzi a helyi rendszer lemezterületét. Bármely fájlrendszert, amely kevesebb, mint egy adott százalékos arányban van szabadnak, hibának tekintenek, és ilyenként jelentik.

Használjuk az NIO2-t FileStore A Java 7-ben bevezetett API, hogy ezeket az információkat platformokon átívelő módon szerezze be.

Most nézzük meg a hibakeresőnket:

public class DiskSpaceErrorChecker implementálja a ErrorChecker {private static final Logger LOG = LoggerFactory.getLogger (DiskSpaceErrorChecker.class); privát ErrorReporter errorReporter; magán kettős korlát; public DiskSpaceErrorChecker (ErrorReporter errorReporter, dupla korlát) {this.errorReporter = errorReporter; this.limit = határ; } @Orride 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 ("A% s fájltárban csak% d %% használható lemezterület van", fileStore.name (), (int) ; }}

Itt megszerezzük a helyi rendszer összes fájltárának listáját, majd mindegyiket külön-külön ellenőrizzük. Bármely, amelynek a felhasználható területként megadott határánál kevesebb van, hibát generál a hibajelentőnkkel.

5. Hibák küldése laza csatornákra

Most tudnunk kell jelenteni a hibáinkat. Az első riporterünk az lesz, aki üzeneteket küld egy Slack csatornára. Ez lehetővé teszi a csatornán bárki számára az üzenet megtekintését abban a reményben, hogy valaki reagál rá.

Ez a SlackClient, a Slack SDK-ból, és annak a csatornának a nevét, amelyre az üzeneteket el szeretné küldeni. Meg is valósítja a mi ErrorReporter felületet, hogy könnyedén csatlakoztathassuk abba, amelyik hibaellenőrző használni akarja:

public class SlackChannelErrorReporter implementálja a ErrorReporter {private SlackClient slackClient; privát String csatorna; public SlackChannelErrorReporter (SlackClient slackClient, String csatorna) {this.slackClient = slackClient; this.csatorna = csatorna; } @Orride public void reportProblem (String problem) {slackClient.postMessage (ChatPostMessageParams.builder () .setText (problem) .setChannelId (channel) .build ()) .join (). UnfrapOrElseThrow (); }}

6. Alkalmazás huzalozása

Most abban a helyzetben vagyunk, hogy bekapcsoljuk az alkalmazást, és figyelemmel kísérhetjük a rendszerünket. A bemutató érdekében a Java-t fogjuk használni Időzítő és TimerTask amelyek a központi JVM részét képezik, de ennek építéséhez ugyanolyan egyszerűen használhatnánk a Spring vagy bármely más keretrendszert.

Egyelőre ennek egyetlen lesz DiskSpaceErrorChecker amely minden olyan lemezt jelent, amely 10% alatt használható az „általános” csatornánkon, és amely 5 percenként fut:

public class MainClass {public static final long MINUTES = 1000 * 60; public static void main (String [] args) dobja az IOException {SlackClientRuntimeConfig runtimeConfig = SlackClientRuntimeConfig.builder () .setTokenSupplier (() -> "") .build (); SlackClient slackClient = SlackClientFactory.defaultFactory (). Build (runtimeConfig); ErrorReporter slackChannelErrorReporter = új SlackChannelErrorReporter (slackClient, "általános"); ErrorChecker diskSpaceErrorChecker10pct = new DiskSpaceErrorChecker (slackChannelErrorReporter, 0.1); Időzítő időzítő = új időzítő (); timer.scheduleAtFixedRate (new TimerTask () {@Orride public void run () {diskSpaceErrorChecker10pct.check ();}}, 0, 5 * PERC); }}

Le kell cserélnünk a „” karaktert a korábban megszerzett tokennel, és akkor készen állunk a futtatásra. Amint megtesszük, ha minden rendben van, a beépülő modulunk ellenőrzi a helyi meghajtókat, és hibaüzenetet küld a Slacknek.

7. Hibák küldése privát üzenetként

Ezután hozzáadunk egy hibajelentőt, amely privát üzeneteket küld. Ez hasznos lehet sürgősebb hibák esetén, mivel így lesz azonnal pingeljen egy adott felhasználót ahelyett, hogy a csatornán valakire hagyatkozna.

A hibajelentőnk bonyolultabb, mert egyetlen, célzott felhasználóval kell interakcióba lépnie:

public class SlackUserErrorReporter implementálja a ErrorReporter {private SlackClient slackClient; privát String felhasználó; public SlackUserErrorReporter (SlackClient slackClient, String felhasználó) {this.slackClient = slackClient; this.user = felhasználó; } @Orride public void reportProblem (String problem) {UsersInfoResponse usersInfoResponse = slackClient .lookupUserByEmail (UserEmailParams.builder () .setEmail (user) .build ()) .join (). UnfrapOrElseThrow (); ImOpenResponse imOpenResponse = slackClient.openIm (ImOpenParams.builder () .setUserId (usersInfoResponse.getUser (). GetId ()) .build ()) .join (). UnfrapOrElseThrow (); imOpenResponse.getChannel (). ifPresent (csatorna -> {slackClient.postMessage (ChatPostMessageParams.builder () .setText (probléma) .setChannelId (channel.getId ()) .build ()) .join (). unfrapOrElseThrow () ); }}

Itt tennünk kell, hogy megtaláljuk a felhasználót, akivel üzenetet küldünk - e-mail cím alapján kerestük meg, mivel ez az egyetlen dolog, amelyet nem lehet megváltoztatni. Következő, megnyitunk egy IM csatornát a felhasználó számára, majd elküldjük a hibaüzenetünket arra a csatornára.

Ez aztán beköthető a fő- módszerrel, és egyetlen felhasználót közvetlenül riasztunk:

ErrorReporter slackUserErrorReporter = new SlackUserErrorReporter (slackClient, "[e-mail védett]"); ErrorChecker diskSpaceErrorChecker2pct = új DiskSpaceErrorChecker (slackUserErrorReporter, 0,02); timer.scheduleAtFixedRate (new TimerTask () {@Orride public void run () {diskSpaceErrorChecker2pct.check ();}}, 0, 5 * PERC);

Ha elkészült, futtathatjuk ezt, és privát üzeneteket is kaphatunk hibákért.

8. Következtetés

Láttuk itt, hogyan építhetjük be a Slacket eszközeinkbe, hogy visszajelzést küldhessünk akár az egész csapatnak, akár az egyes tagoknak. Sokkal többet tehetünk a Slack API-val, miért ne nézhetnénk meg, hogy mi mindent tudunk még beépíteni.

Szokás szerint a cikk forráskódja megtalálható a GitHubon.

Java alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT