PASOE – OEMANAGER

Właśnie pojawiła się nowa wersja OpenEdge LTS 12.8 a wraz z nią sporo nowości. Poświęcę im cały artykuł, ale to następnym razem. Teraz chciałbym skupić się na jednym elemencie dotyczącym serwera aplikacji PASOE, a mianowicie na narzędziu OEMANAGER.
Pamiętacie może, że dla klasycznego appservera czy webspeeda można było uruchomić z poziomu wiersza poleceń (proenv) komendę ASBMAN czy WTBMAN aby uzyskać status procesu i podstawowe metryki.
Podobnie jest z OEMANAGER – można uzyskać wszystkie potrzebne metryki w jednym wywołaniu, w przeciwieństwie do innych sposobów jak wywołania API. Ponadto, narzędzie OEMANAGER może być wykorzystywane podczas runtime’u.
Aby można było z niego skorzystać instancja musi zawierać wdrożone aplikacje: OpenEdge Manager (oemanager.war) and Tomcat Manager (manager.war). Możemy wdrożyć je odpowienimi poleceniami do istniejącej instancji lub stworzyć nową z już wdrożonymi tymi aplikacjami używając opcji -f. Poniżej zamieszczam komendę utworzenia takiej instancji mypasoe. Do niedawna zalecani nie instalować tych aplikacji w środowisku produkcyjnym ale obecnie nie ma takich przeciwskazań o ile odpowienio je zabezpieczymy. Jednym takim elementem zabezpieczeń jest oczywista zmiana domyślnych haseł. Po resztę informacji odsyłam do dokumentacji. Ja w tym przykładzie pozostanę przy domyślnych hasłach, a dlaczego, to zaraz pokażę.

pasman create -v -f -p 8813 -P 8814 -s 8815 %WRKDIR%\mypasoe
Teraz uruchamiam instancję poleceniem:
pasman oeserver -start -I mypasoe
Jest to nowsza forma komendy tcman (pasman) pasoestart, wprowadzona od OE 12.5. Po prawidłowym uruchomieniu procesu Tomcata nie oznacza, że wszystkie komponenty OpenEdge zostały uruchomione. Polecenie tcman -oeserver start sprawdza logi pod kątem takich błędów. Polecenie posiada kilka jeszcze innych opcji, a więc ci, którzy mają wersję 12.5+ powinni korzystać właśnie z niej.

Po uruchomieniu oemanager dostajemy poniższą długą listę opcji.

     [echo]  TCMAN Shortcuts:
     [echo]
     [echo]  oemanager query    - Use TCMAN to query the PAS instance
     [echo]
     [echo]  oemanager startup  - Use TCMAN to start the PAS instance
     [echo]                       [OPTIONAL] timeout=300 - Time (seconds) to wait for a proper startup
     [echo]
     [echo]  oemanager shutdown - Use TCMAN to stop the PAS instance
     [echo]                       [OPTIONAL] timeout=300 - Time (seconds) to wait for a proper shutdown
     [echo]
     [echo]
     [echo]  Support Tools:
     [echo]
     [echo]  oemanager inventory - Bundle useful PAS instance files (as .zip) for support tickets
     [echo]
     [echo]
     [echo]  Status/Info:
     [echo]
     [echo]  oemanager status - [RO] Obtain MSAgent/connection status information for an ABL App
     [echo]                     [OPTIONAL] basemem=819200 - Minimum memory threshold (bytes) to consider as 'unused' agent sessions
     [echo]
     [echo]  oemanager stacks - [RO] Obtain stack information for all MSAgents for an ABL App
     [echo]
     [echo]  oemanager flush  - [RO] Flush the available deferred log buffer to agent log file
     [echo]
     [echo]  oemanager locks  - [RO] Display database users and their table locks related to an MSAgent-Session
     [echo]                     This utilizes a single DBConnection; edit the 'locks' task in build.xml to add more as necessary
     [echo]                     Note: Only provides session data if using self-service DB connections for OE versions under 12.5
     [echo]                     [REQUIRED] pf=[PF_NAME] - PF file to use for database connection(s)
     [echo]
     [echo]  oemanager users  - [RO] Alias for 'locks' task
     [echo]
     [echo]
     [echo]  Agent Management:
     [echo]
     [echo]  oemanager add     - Add (read: start) one new MSAgent for an ABL App
     [echo]
     [echo]  oemanager close   - Perform a 'soft restart' of an ABL App (runs: status, flush + trimhttp + stop, status)
     [echo]                                       For this task the 'trimhttp' will be called with the termination option 1 (forced)
     [echo]                      [REQUIRED] webapp=[WEBAPP_NAME] - WebApp for Tomcat Manager to terminate active client sessions
     [echo]                                  The given WebApp is expected to be associated with the provided ablapp name
     [echo]                      [OPTIONAL] sleep=1 - Sleep time in minutes after stop, prior to final 'status' output
     [echo]
     [echo]  oemanager clean   - Alias for 'close' task [Deprecated]
     [echo]
     [echo]  oemanager refresh - Refresh ABL Sessions for each MSAgent for an ABL App (OE 12 Only)
     [echo]                      Note: This will essentially terminate all sessions (gracefully),
     [echo]                            and prepare the Agent to pick up any R-code changes
     [echo]
     [echo]  oemanager reset   - Reset an aspect of each MSAgent for an ABL App
     [echo]                      [REQUIRED] resettype=stats [stats|logs]
     [echo]
     [echo]  oemanager stop    - Gracefully stop one or all MSAgents (+stacks output) for an ABL App
     [echo]                      [OPTIONAL] waitfinish=120000 - How long to wait (milliseconds) if the MSAgent is busy serving a request
     [echo]                      [OPTIONAL]  waitafter=60000  - Additional time to wait (milliseconds) before killing [hard stop] the MSAgent
     [echo]                      [OPTIONAL]        pid=[AGENT_PID] - Numeric process ID for a specific MSAgent to be stopped
     [echo]
     [echo]
     [echo]  Session Management:
     [echo]
     [echo]  Note: All trim actions listed below will write application stack information to a file.
     [echo]
     [echo]  oemanager trimsingle - Trim a single ABL Session (via the Agent Manager) for a specific MSAgent
     [echo]                         [REQUIRED]          pid=[AGENT_PID]  - Numeric process ID of the MSAgent for context
     [echo]                         [REQUIRED]       sessid=[SESSION_ID] - Numeric ID for the ABL Session to be stopped
     [echo]                         [OPTIONAL] terminateopt=0 - Termination Option: 0=graceful, 1=forced, 2=finish+stop
     [echo]
     [echo]  oemanager trimall    - Trim all available ABL Sessions (via the Agent Manager) for each MSAgent for an ABL App
     [echo]                         Note: For any busy sessions considered stuck use 'trimhttp' with a specific Session ID
     [echo]                         [OPTIONAL] terminateopt=0 - Termination Option: 0=graceful, 1=forced, 2=finish/stop
     [echo]
     [echo]  oemanager trimidle   - Trim only the IDLE ABL Sessions (via the Agent Manager) for each MSAgent for an ABL App
     [echo]                         Allows for manually scaling down an MSAgent which may have many unused ABL Sessions
     [echo]                         [OPTIONAL] terminateopt=0 - Termination Option: 0=graceful, 1=forced, 2=finish+stop
     [echo]
     [echo]  oemanager trimhttp   - Trim one or all Client HTTP Sessions (via the Session Manager) for an ABLApp + WebApp
     [echo]                         Terminating a client HTTP session will also terminate its associated ABL Session
     [echo]                         [REQUIRED]       webapp=[WEBAPP_NAME] - WebApp for Tomcat Manager to terminate active sessions
     [echo]                                           The given WebApp is expected to be associated with the provided ablapp name
     [echo]                         [OPTIONAL]       sessid=[SESSION_ID]  - Alphanumeric Client Session ID to be stopped
     [echo]                                           When no session ID provided, all available Client HTTP Sessions will be expired
     [echo]                         [OPTIONAL] terminateopt=0 - Termination Option: 0=graceful, 1=forced, 2=finish+stop
     [echo]
     [echo]
     [echo] Current parameter values, override via command line or 'oemanager.properties':
     [echo]     scheme=http
     [echo]       host=localhost
     [echo]       port=8813
     [echo]     userid=tomcat
     [echo]     passwd=tomcat
     [echo]     ablapp=mypasoe

Niektóre są oczywiste jak: start, stop, status itp. ale niektóre wyglądają bardzo ciekawie, np. opcja flush – pomaga znaleźć przyczynę powtarzających się awarii agenta, poprzez opóżnione zrzucenie informacji ze specjalnego bufora do pliku.
Na samym dole widać użytkownika i hasło do procesu Tomcata. Należy dla bezpieczeństwa wejść do pliku oemanager.properties, znajdującego się w podkatalogu bin dla instancji, odkomentować dwie linie i ustawić puste dane logowania, jak na poniższym obrazku.

OK, poniżej zamieściłem wynik działania komendy oemanager status.

 [PCTRun]  PASOE Instance: http://localhost:8813
   [PCTRun]
   [PCTRun] ABL Application Information [mypasoe - v12.8.0 ( 2023-12-21 )]
   [PCTRun]     WebApp: ROOT
   [PCTRun]       APSV: ENABLED
   [PCTRun]       SOAP: ENABLED
   [PCTRun]       REST: ENABLED
   [PCTRun]        WEB: ENABLED
   [PCTRun]
   [PCTRun] Manager Properties
   [PCTRun]             Maximum Agents:           2
   [PCTRun]             Minimum Agents:           1
   [PCTRun]             Initial Agents:           1
   [PCTRun]     Max. Connections/Agent:         200
   [PCTRun]     Max. ABLSessions/Agent:         200
   [PCTRun]         Idle Conn. Timeout:     300.000 ms (00:00:05:00.000)
   [PCTRun]       Idle Session Timeout:   1.800.000 ms (00:00:30:00.000)
   [PCTRun]         Idle Agent Timeout:   1.800.000 ms (00:00:30:00.000)
   [PCTRun]      Idle Resource Timeout:           0 ms (00:00:00:00.000)
   [PCTRun]         Conn. Wait Timeout:       3.000 ms (00:00:00:03.000)
   [PCTRun]       Request Wait Timeout:      15.000 ms (00:00:00:15.000)
   [PCTRun]     Initial Sessions/Agent:           2
   [PCTRun]     Min. Avail. Sess/Agent:           1
   [PCTRun]
   [PCTRun] > Agent PID 13208: AVAILABLE
   [PCTRun]     Est. Agent Lifetime: 00:00:00:00.000
   [PCTRun]     DynMax ABL Sessions:          200
   [PCTRun]      Total ABL Sessions:            2
   [PCTRun]      Avail ABL Sessions:            2
   [PCTRun]        Open Connections:            1
   [PCTRun]         Overhead Memory: 13.897 KB
   [PCTRun]
   [PCTRun]     SESSION ID      STATE           STARTED                         LIFETIME          SESS. MEMORY     ACTIVE MEM.   REQUESTS       BOUND/ACTIVE CLIENT SESSION
   [PCTRun]                4    IDLE            18/02/2024 15:18:40,229-01:00   00:00:01:28.600         742 KB         742 KB           0        -
   [PCTRun]                7    IDLE            18/02/2024 15:18:40,229-01:00   00:00:01:28.600         742 KB         742 KB           0        -
   [PCTRun]       Active Agent-Sessions: 0 of 2 (0% Busy)
   [PCTRun]     Utilized Agent-Sessions: 0 of 2 (>801 KB)
   [PCTRun]        Approx. Agent Memory: 15.380 KB
   [PCTRun]
   [PCTRun] Session Manager Metrics (Count-Based)
   [PCTRun]            # Requests to Session:           0
   [PCTRun]           # Agent Responses Read:           0 (0 Errors)
   [PCTRun]         # Agent Requests Written:           0 (0 Errors)
   [PCTRun]     Concurrent Connected Clients:           0 (Max: 0)
   [PCTRun]       # Reserve ABLSession Waits:           0
   [PCTRun]     # Reserve ABLSession Timeout:           0
   [PCTRun]
   [PCTRun] Client HTTP Sessions: 0

Administrator otrzymuje natychmiastową całościową informację o warstwach transportowych, właściwościach agentów itd.
Zachęcam do przetestowania i korzystania z opcji komendy OEMANAGER.

OpenEdge Command Center 1.3

Witajcie wciąż w wakacyjnym nastroju! Ponieważ pojawiła się ostatnio nowa wersja OpenEdge Command Center – 1.3, właśnie jej poświęcam sierpniowy wpis.
Na początku wspomnę jeszcze o jednym elemencie, o którym nie napisałem uprzednio, a który jest od pierwszej wersji OECC – o etykietach. Na poniższym obrazie widać takie etykiety, które reprezentują nazwę maszyny, tryb instancji oraz jej nazwę. Dodatkowo usunąłem niektóre kolumny, zostawiając te najważniejsze, z punktu widzenia czytelności. Etykiety są ważnym elementem szczególnie w sytuacji gdy instancji jest bardzo wiele i są kłopoty z identyfikacją.

Ale przejdźmy teraz do instalacji nowej wersji OECC 1.3. Tym razem w dokumentacji możemy znaleźć opis całego procesu, choć niektóre istotne informacje są pominięte, dlatego zamiast korzystać z instrukcji pdf, polecam raczej dokumentację online.
Nowa wersja OECC wymaga także nowszej wersji MongoDB: 4.4, 5.0, lub 6.0. Ja zainstalowałem wersji 6.0 na Windows Server 2019. Tym razem nie instaluję MongoDB jako serwis Windows.

Po zainstalowaniu MongoDB gdy baza i OECC są zainstalowane na tej samej maszynie i w takiej sytuacji trzeba związać adres ip 0.0.0.0.

W pliku konfiguracyjnym …\conf\db-config.json
ustawiam wartość:

"dbHostNameAndPort": "0.0.0.0:27017"

Ponadto od wersji MongoDB 6.x w pliku …\bin\mongod.cfg ustawiamy

Dodaję katalog np. c:\mongodata i startuję MongoDB jako administrator poleceniem:
mongod.exe –dbpath c:\mongodata -bind_ip 0.0.0.0
(Tego okna nie zamykam, dopóki proces MongoDB ma działać).

Dodaję użytkownika do bazy admin (tak jak opisałem to wcześniej).

Teraz restartujemy MongoDB z włączoną autoryzacją:
mongod.exe –dbpath c:\mongodata -bind_ip 0.0.0.0 –-auth

I możemy przystąpić do instalacji OECC 1.3, jak było to opisane wcześniej.
Po zainstalowaniu na jednej lub kilku systemach Agenta OECC, możemy w końcu zobaczyć jakie informacje są przekazywane do konsoli na serwerze.
Widzimy, że została dodana nowa ikonka po lewej stronie, reprezentująca bazy danych.

Klikając ikonkę mamy dostęp do następujących danych:

  • Nazwa bazy danych.
  • Etykiety przypisane do bazy danych.
  • Pełna ścieżka do bazy.
  • Nazwa agenta OECC.
  • Status uruchomienia bazy.
  • Nazwa portu/usługi.
  • Wersja bazy danych.
  • Nazwa hosta na którym pracuje baza danych.
  • Instalacja OpenEdge, w której znajduje się baza.

Podobnie jak dla PASOE wygodnie jest ustawić etykiety identyfikujące instancje bazy.

Jeśli agent nie wychwycił jakiejś instancji, musimy ją dodać ręcznie. W polu OpenEdge Installation wybieramy wersję OE. Dodajemy pełną ścieżkę, numer portu/nazwę usługi oraz dane logowania. Możemy dodać też opcjonalnie dodatkowe parametry startowe.

Jak widać nie ma tutaj szczegółowych danych wydajności bazy znanych z OE Management. Takie dane można uzyskać wykorzystując technologię OpenTelemetry oraz aplikację typu APM (Application Performance Monitor).

OpenEdge Command Center – cz. 2

W niniejszym wpisie powracamy do tematu OECC. Muszę powiedzieć na wstępie, że ten produkt cieszy się coraz większym zainteresowaniem klientów ze względu na nowoczesny interfejs, duże bezpieczeństwo, wydajność czy łatwość w monitorowaniu zdalnymi zasobami. Te zalety są kluczowe w porównaniu z OEM/OEE, który jest bardzo wygodny do stosowania raczej dla lokalnych zasobów. Należy przypomnieć że technologia OECC zaczyna się od OE 12.2 – nie da się monitorować wcześniejszych wersji.

Tym razem zainstalujemy agenta na maszynie z zainstalowanym środowiskiem OpenEdge (PASOE, bazy danych), który będzie zbierał dane i przesyłał je do OECC Servera.
Pierwszym krokiem jest wygenerowanie klucza na serwerze, który posłuży do uwierzytelnienia połączenia z agentem. Wybieramy Generate Agent Keys.


Wygenerowany nowy klucz zapisujemy na dysku. Jest to plik o nazwie serverInfo.json. Będzie potrzebny do zainstalowania agenta (najczęściej na innej maszynie).

Sama instalacja jest bardzo prosta. Jedynym ciekawym krokiem jest moment wczytania danych z podanego pliku, co zaoszczędzi nam ręcznego wpisywania danych.

Jeśli instalujemy nowszą wersję agenta w miejsce starej, pojawi się poniższy komunikat (nie będzie wtedy konieczności podawania danych z pliku json).

OK, zainstalowaliśmy agenta i teraz chcemy zobaczyć czy wysyła on dane do centrum monitorowania na serwerze. Musimy jeszcze upewnić się czy w zaporze otwarty jest port (domyślnie 8000), bo w przeciwnym wypadku dane będą blokowane. W moim przykładzie serwer OECC został zainstalowany na VM z systemem Windows Server 2016, a agent i OpenEdge 12 na Windows 10.

Z poziomu konsoli serwera OECC możemy dla danej instancji PASOE wybrać kilka akcji. Najciekawiej wygląda Clone, która ma utworzyć kopię instancji w nowej lokalizacji. Zróbmy to dla mypasoe. Nowa nazwa (mało wyszukana) mypasoeCLONE.

Na sklonowanie zwykle trzeba chwilę zaczekać, szczególnie jeśli instancji jest online.

I po chwili mamy nowego clona. Instancja jest zatrzymana i zwykle wymaga pewnego dostosowania w konfiguracji aby była w pełni działająca.

Zobaczmy jeszcze dla mypasoe jakie inne ciekawe informacje możemy tu znaleźć. Jest np. info o wdrożonych aplikacjach webowych, usługach, ich parametry i aktualny status.

Tyle o wersji OECC 1.2. W następnym artykule chciałbym pokazać jakie inne elementy monitorowania zostały dodane w OECC 1.3 !

OpenEdge 12.7

5 maja pojawiła się wersja OpenEdge 12.7. Ma być ona ostatnią z wersji Innovation dla dwunastki ponieważ ostatnia, zapowiadana na koniec roku, ma być wersją LTS. Przyjrzyjmy się wybranym nowościom.

PROSTRCT REMOVEONLINE – nowa komanda poprawiająca dostępność bazy danych. Umożliwia usuwanie extentów lub całych obszarów bez konieczności zamykania bazy.

PROUTIL TABLEREORG to narzędzie służące do poprawy stopnia fragmentacji w tabelach (zastępuje operacje dump i load online) dla obszarów typu II. Wprowadzono je w OE 12.3, a teraz dodano nowe parametry np. restrict czy nosmartscan. Pierwsza opcja jest przeznaczona dla dużych tabel i pozwala na reorganizację wybranego fragmentu tabeli wg. wartości pola. Druga opcja wyłącza domyślne inteligentne skanowanie. Przykład poniżej.

Wprowadzono nowy typ pakietu (lub biblioteki) kodu aplikacji ABL, który można podpisać i weryfikować, aby mieć pewność, że skompilowany kod aplikacji ABL nie został uszkodzony ani zmodyfikowany. Ten nowy typ biblioteki jest znany jako plik archiwum i ma rozszerzenie .apl. Do utworzenia archiwum, dodawania r-kodów służy komenda PROPACK, a do podpisywania PROSIGN.

OpenEdge obsługuje teraz OAuth2 i SAML do uwierzytelniania i autoryzacji. Te standardowe protokoły zapewniają bezpieczny i wygodny mechanizm uwierzytelniania użytkowników bez udostępniania poufnych informacji. OpenEdge Authentication Gateway może automatycznie przekonwertować zweryfikowane tokeny na token OpenEdge Client Principal, który możemy obsługiwać w aplikacjach ABL.

Administrowanie PASOE: do tej pory można było skonfigurować instancje tak aby w razie potrzeby agent wielosesyjny uruchamiał dodatkowe sesje, ale nie było możliwości aby te sesje były automatycznie przycinane. W obecnej wersji OpenEdge dodano nowe właściwości do pliku openedge.properties, które umożliwiają administratorowi systemu skonfigurowanie instancji PASOE tak, aby sesje ABL były przycinane gdy nie są już potrzebne czy też gdy osiągnęły limit czasu lub pamięci.

W Developer Studio dodano ABL Type Hierarchy View, który pokazuje relacje rodzic-dziecko między klasami ABL i interfejsami, aby pomóc programiście ABL zobaczyć hierarchię i strukturę dziedziczenia klasy i przechodzenie do dowolnego elementu widocznego w widoku.

Dla wykorzystujących AI Archiver do zapisu After Image pojawiła się ciekawa możliwość wystartowania tego procesu online bez konieczności wykonania backupu. Jest to szczególnie istotne dla dużych baz gdy wykonanie kopii powodowało wstrzymanie wykonywanie transakcji.

W operacja przywracanie bazy PROREST dodano parametry do wykonania jej jako proces wielowątkowy.

Jest jeszcze kilka nowinek po które odsyłam do dokumentacji.

OpenEdge Command Center – Server

O nowym narzędziu OpenEdge Command Center (OECC) mówi się coraz częściej, także na tym blogu.
Brak niestety dobrej instrukcji instalacji – OECC korzysta z bazy MongoDB, która nie należy do Progressa i trzeba korzystać z zewnętrznych instrukcji.
Ja pokażę jak zainstalować OECC 1.2 na przykładzie darmowej i lokalnej licencji MongoDB Community Server.

Pobieram ze stron mongodb.com wersję 4.2 na Windows (OECC 1.2 nie współpracuje z MongoDB 5.x).
Uruchamiam instalator zostawiając ustawienia domyślne. W kolejnym kroku odznaczam instalację dodatku Compass (można w razie czego doinstalować go później).

W usługach, możemy zlokalizować teraz nowy serwis MongoDB, czyli uruchomiony demon mongod.exe.

Następnym krokiem jest uruchomienie wiersza poleceń CMD jako Administrator i przejście do katalogu gdzie zostały zainstalowane binaria:
C:\Program Files\MongoDB\Server\4.2\bin
Tutaj uruchamiamy shell MongoDB poleceniem mongo (alternatywnie możemy uruchomić plik mongo.exe z Exploratora jako Administrator).
Podajemy komendę show dbs, żeby sprawdzić jakie testowe bazy danych zostały zainstalowane.

Będziemy korzystać z bazy admin dlatego podajemy następną komendę use admin.
Teraz dodamy użytkownika o uprawnieniach admina o nazwie np. “MongoAdmin” i haśle “MongoPass” (OECC wymaga wprawdzie zwykłego użytkownika z prawem read/write, ale co szkodzi zaszaleć :-))

db.createUser({
user:"MongoAdmin",
pwd:"MongoPass",
roles:[{role:"userAdminAnyDatabase",db:"admin"}]
})

Efekt widać poniżej, użytkownik został prawidłowo dodany (wielokropek jest dodawany automatycznie).

Teraz uruchamiamy instalator OECC 1.2, pozostawiając w kilku pierwszych krokach ustawienia domyślne (ewentualnie podając własne katalogi do instalacji, itd.).
Dochodzimy do Database Configuration wstawiając dane logowania nowo utworzonego użytkownika MongoDB.

W kroku First User Setup należy stworzyć dane logowania do panelu Servera OECC…

Sprawdzamy czy wszystko się zgadza i czekamy na zakończenie procesu instalacji.

Na koniec pojawia się ekran logowania – wpisujemy wymyślone dane pierwszego użytkownika.

Voila! Możemy przejść teraz do konfiguracji kont innych użytkowników oraz, przede wszystkim, do utworzenia unikalnych kluczy dla procesów Agentów, ale o tym napiszę następnym razem.

OpenEdge 12.6

Wersja OpenEdge 12.6 pojawiła się z końcem września br. jako Innovation Release (termin który zastąpił Non-LTS Release) Podczas instalacji trzeba jak zwykle podać ścieżkę do JDK – w tej wersji jest to JDK 17.
Zaczynamy od nowości związanych z bazami danych.

PROUTIL IDXCOMPACT – to popularne narzędzie poprawiające wydajność indexów także dla bazy online. Komenda ta została wzbogacona o opcję UNUSEDBLOCKS, użyteczną szczególnie po operacji usuwania dużej liczby rekordów. Powoduje ona skanowanie łańcucha “delete” i czyszczenia bloków indexowych w przypadku indexów unikalnych. Stosowanie dla indexów nie-unikalnych nie spowoduje ostrzeżenia ani błędu na konsoli.

Z tą opcję nie można podać stopnia kompresji, gdyż spowoduje to ostrzeżenie i niewykonanie polecenia.

Obcięcie obszaru przechowywania danych online.
Do tej pory obcięcie obszaru (PROUTIL TRUNCATE AREA) można było wykonać jedynie dla zamkniętej bazy, po obcięciu pliku BI i wyłączeniu zapisu AI.
Obecnie operację można przeprowadzić dla bazy włączonej. Obcięcie obszaru stosuje się po usunięciu dużej ilości danych, np. przeniesieniu danych historycznych do innego obszaru. Obcięcie obszaru można wykonać tylko gdy w obszarze nie znajdują się żadne obiekty (tablice, indexy, LOBy).

Wprowadzono obsługę dużych plików dla licencji Workgroup, co ma zlikwidować problem gdy baza działająca w środowisku produkcyjnym Enterprise jest skopiowana do testowania i rozwoju, co często przeprowadza się w niższej licencji Workgroup. Od OE 12.6 znacznik obsługi dużych plików jest włączany automatycznie dla obu typów licencji.

Usprawniony został mechanizm działania narzędzia do naprawy indexów PROUTIL IDXFIX. Dla opcji 1 i 8 skanowane są tylko te bloki obszaru typu II, które należą do podanych tabel i indexów. Usprawnienie nie działa dla bloków obszaru I. Poprawiono także mechanizm kasowania rekordów w tym samym narzędziu.

Przejdźmy teraz do wybranych nowości deweloperskich.
Identyfikacja Memory Leaks. Programiści mogą teraz używać klasy OpenEdge.Core.Util.LeakCheck w bibliotece corelib do przetwarzania logów i identyfikacji wycieków pamięci. Dokładne informacje o tej klasie można znaleźć w dokumentacji.
Praktyczny opis identyfikacji wycieków pamięci znajduje się tutaj.

Środowisko Progress Developer Studio dla OpenEdge zostało zaktualizowane i korzysta z wersji Eclipse 4.23.

Został zoptymalizowany tutaj proces inicjalizacji widoczny szczególnie w przypadku złożonych i rozbudowanych workspace’ów.

Warto dodać, że w tym samym czasie pojawiła się nowa wersja OE Command Center 1.2, w której administratorzy systemu mogą monitorować metryki wydajności PASOE oraz baz danych OE. Metryki wydajności są zbierane przy użyciu standardu OpenTelemetry (OTel).
Zarządzanie PASOE zostało wzbogacone o funkcję klonowania instancji.
Ponadto, został zautomatyzowany proces instalacji w systemie Windows, zamiast ręcznej edycji skryptów uruchamiany jest teraz instalator.
O wielu innych nowościach możecie przeczytać w dokumentacji. Zapraszam do dyskusji na polskiej grupie PUG.

Swagger UI i PASOE

Swagger UI jest narzędziem które umożliwia wizualizację zasobów API bez konieczności implementacji dodatkowych zewnętrznych aplikacji.

Swagger składa się z plików HTML, JavaScript i CSS, które dynamicznie generują dokumentację na podstawie interfejsu API.
Jest dostępny w PASOE począwszy od wersji OE 12.0 (domyślnie wyłączony). Od wersji OE 12.2 jest domyślnie włączony dla instancji deweloperskich – należy pamiętać aby nigdy nie włączać go w środowiskach produkcyjnych.

Dostęp do Swaggera jest z poziomu oemanagera (http://host:port/oemanager/), ale jeśli dostęp jest zabroniony, to wchodzimy z poziomu managera, czyli http://host:port/manager/, np. http://localhost:8813/manager.


Tutaj klikając oemanager dostajemy ekran dokumentacji Swaggera.


Ekran składa się z sekcji np. dla każdej warstwy transportowej,  Agent Manager, Session Manager i OEABL ManagerService.
Przechodzimy do tej drugiej i klikamy na GET /applications, następnie Try it out i Execute.


Dostajemy listę wszystkich aplikacji ABL dla instancji PASOE wraz z parametrami w postaci JSON. Listę tę można pobrać jako plik tekstowy.

Jeśli w OEABL ManagerService kliknę GET /applications/{AppName}/webapps i wpiszę nazwę aplikacji ABL, dostanę w podobnej postaci listę wszystkich aplikacji webowych dla tejże aplikacji.

Aby pobrać listę web servisów dla danej aplikacji webowej wybieram GET/applications/{AppName}/webapps/{WebAppName} i podaję nazwę aplikacji ABL i web serwisu.

Jak widać na obrazkach czasowniki GET nie są jedynymi do użycia. Można np. zaktualizować listę poprzez czasownik POST czy zerować metryki (DELETE).
Opcji jest bardzo wiele.

PASOE HealthScanner

OpenEdge HealthScanner został stworzony po to, aby ostrzegać administratorów o potencjalnych problemach z instancją PASOE, dzięki czemu serwer może zostać wyłączony z eksploatacji zanim wystąpi awaria.Usługa nie jest przeznaczona do badania ani rozwiązywania problemu lecz do oznaczenia serwera, który znajduje się poniżej pewnego, zdefiniowanego progu.

OpenEdge HealthScanner jest przeznaczony do użytku z instancjami PASOE w środowisku produkcyjnym chociaż można go testować również w środowisku deweloperskim. HealthScanner jest serwisem Tomcata z własnym portem HTTP, pulą wątków i konfiguracją.

Tradycyjnie będę tutaj korzystać z polecenia pasman (zamiast tcman) i tak polecenie:
pasman feature -I mypasoe wyświetli funkcje instancji PASOE (tutaj: mypasoe) i ich stan. Widać, że funkcja HealthCheck jest wyłączona.

Włączenie funkcji można wykonać przez komendę tcman feature (pasman feature), a następnie sprawdzić tę samą komendą czy polecenie przyniosło zamierzony efekt. Obie komendy widać poniżej.

Innym sposobem jest skorzystanie z interfejsu OEM/OEE.

Samo włączenie funkcji jednak nie wystarczy. Potrzebne jest także włączenie tzw. data collectora, czyli procesu zbierającego dane. Komendy włączające proces i sprawdzające jego status są widoczne poniżej.

Proces ten pobiera dane z różnych wirtualnych “sond” takich jak: PASOE HealthScanner, JVM Health, Tomcat Health, Transport Health i wielu innych. Każda próbka ma określona wagę, wykorzystywaną do obliczenia ogólnego współczynnika “zdrowia” PASOE.

Wszystkie sondy i ich wagi możemy podejrzeć w pliku: [instancja]/conf/health.config.

Jeśli przyjrzymy się np. sekcji Transport Health, zauważymy, że są tu trzy warstwy transportowe APSV, WEB i REST. Udział każdej wynosi 0.33333. Jeśli w naszym systemie aplikacyjnym nie ma np. warstwy WEB, to możemy ustawić udział w niej na 0, a w pozostałych dwóch na 0.5.

Warto przeczytać także informacje dot. wyliczeń współczynników zawarte w pliku [instancja]/conf/health.config.README.

Usługa działa domyślnie na porcie 8899 i generuje kilka zestawień w formacie JSON np:
http://localhost:8899/health?view=summary

zestawienie szczegółowe:
http://localhost:8899/health?view=details

czy bardzo ciekawe zestawienie przedstawiające konfigurację sond i wyliczeń:
http://localhost:8899/health?view=config

Korzystanie z PASOE HealthScanner wymaga pewnej wprawy i dlatego nie jest to usługa dostępna od razu po instalacji, a dopiero po włączeniu jej przez administratora, ale warto ją przetestować i poznać bliżej.

OpenEdge 12.5

OpenEdge 12.5, to kolejna wersja z serii non-LTS Release – skierowana do tych, którzy czekają na wszelkie nowinki techniczne. Przedstawię tutaj pokrótce niektóre z nich.

Niedawno pisałem o nowym darmowym produkcie OpenEdge Command Center. Z wersją 12.5 możemy pobrać OECC w wersji 1.1, dzięki której możemy uzyskać informacje nie tylko o stanie poszczególnych instancji PASOE, ale także o ich aplikacjach. Po lewej stronie na głównym panelu widać nową ikonę (podświetlona na niebiesko) – po kliknięciu w nią znajdziemy się w widoku ABL Applications.

Składa się on z kilku okien. W pierwszym od lewej, widać listę instancji. Dalej, dla wybranej instancji, widać szczegółowe informacje nt aplikacji.
Musze przyznać, że śledzę rozwój tego produktu z dużym zaciekawieniem. Zyska on bardzo na wartości gdy pojawią się możliwości monitorowania baz danych.

W zarządzaniu PASOE pojawiło się nowe rozszerzenie dla komendy TCMAN i PASMAN – OESERVER. Jest ono zalecanym narzędziem do uruchamiania i zatrzymywania PASOE. Obsługuje dodatkowe parametry, aby zamknąć powiązane sesje klienta APSV i zebrać bardziej szczegółowe informacje o instancji. W celu zapewnienia kompatybilności OESERVER obsługuje istniejące parametry PASOESTART. Poniżej widać kilka parametrów z długiej listy komendy OESERVER.

Przykład działania komendy pasman oeserver -restart oraz –status (status wyświetla więcej informacji niż query). Na końcu podawane są informacje nt agentów i sesji.

Pełną listę parametrów znajdziecie tutaj.

Integracja OpenEdge z Apache Kafka – Kafka to otwarta, rozproszona platforma do strumieniowego przesyłania wydarzeń (event-streaming), szeroko stosowana w wielu branżach i organizacjach. Zapewnia przechwytywanie danych w czasie zbliżonym do rzeczywistego ze źródeł, takich jak bazy danych, aplikacje, czujniki, urządzenia mobilne i usługi w chmurze.

OpenEdge udostępnia nowe OpenEdge.Messaging API do wysyłania wiadomości do klastra Kafki poprzez Kafka producer i odbierania wiadomości z tego klastra przez Kafka consumer.

Progress Developer Studio dla OpenEdge obsługuje teraz inteligentną kompilację. Kiedy programista ABL wprowadza zmiany w pliku i go kompiluje, Developer Studio automatycznie kompiluje także wszystkie inne pliki, których mogą dotyczyć te zmiany. Dzięki temu identyfikowane są wszystkie błędy kompilacji wprowadzone w wyniku zmian w kodzie.

Na zakończenie chciałbym wspomnieć o istotnym ułatwieniu w procesie odtwarzaniu bazy po awarii z backupu i plików AI. Administratorzy mogli mieć problem w szybkim określeniu kolejności extentów. W wersji OE 12.5, wprowadzono nowe narzędzie do komendy rfutil,  AIMAGE SUMMARY, które uruchamia szybkie skanowanie informacji potrzebnych do zidentyfikowania plików AI.

Jak zwykle, po więcej nowości odsyłam do dokumentacji i internetu.

OpenEdge Command Center

Czytelnicy niniejszego bloga znają podstawowy i sztandarowy produkt służący do monitorowania systemów – OpenEdge Management (OEM) oraz jego uboższą wersję OpenEdge Explorer (OEE).
Produkt ten został wprowadzony po raz pierwszy wiele lat temu pod nazwą Fathom Management w wersji V9. Wciąż jest rozwijany i świetnie spisuje się w małych i średnich sieciach.

Tym razem chciałbym przybliżyć nowy produkt, OpenEdge Command Center (OECC) służący do zarządzanie wieloma zasobami i instalacjami OpenEdge na różnych komputerach i różnych wersjach OpenEdge.

Pierwsza wersja OpenEdge Command Center została stworzona z myślą o efektywnym zarządzaniu PASOE oraz, w przyszłości, bazami danych. Aktualna wersja 1.0 wspiera OE 12.2.5 i wyższe. Nie ma wsparcia wstecz.
OECC jest darmowe dla posiadaczy licencji OE, podobnie jak OEE i ma na celu uproszczenie ogólnego zarządzania platformą OpenEdge.
Serwer OpenEdge Command Center jest obsługiwany na następujących platformach:

  • Ubuntu 18.04 LTS
  • Oracle Linux 8
  • Red Hat Enterprise Linux 8
  • SUSE Linux Enterprise Server 15
  • CentOS Linux 8
  • Windows 64

Można także uruchomić OpenEdge Command Center Server na 64-bitowym serwerze Linux z obsługą chmury, który jest skonfigurowany z MongoDB ATLAS.
Jednym z celów OECC jest zastąpienie produktu OEE, ze względu na niektóre problemy, które były zgłaszane przez użytkowników jak np. przestarzały interfejs, “ciężki” proces zdalnego AdminServera wymagający otwarcia 4 portów czy to, że API muszą być wyeksponowane w standardzie OpenAPI.

Serwer OECC można wdrożyć jako pojedynczy węzeł lub, dla zapewnienia wysokiej dostępności, jako klaster wielowęzłowy. Aby zapewnić wysoką dostępność, serwer współpracuje ze wszystkimi load balancerami obsługującymi transporty HTTP/HTTPS oraz protokoły websocket, takie jak Nginx, Serwer HTTP Apache, AWS, ELB/ALB itp.
OECC do przechowywania danych korzysta z bazy danych MongoDB oraz magazynu plików (patrz rysunek).


MongoDB to nierelacyjna baza, która przechowuje dane w postaci dokumentów w formacie podobnym do JSON. Są w niej zawarte wszystkie szczegóły dotyczące wykrytych komponentów OE takich jak PASOE (w przyszłości także baz danych OE) oraz ustawienia konfiguracyjne OECC. Instalacja bazy MongoDB jest wymagana przed instalacją serwera OECC, który wspiera następujące wersje (www.mongodb.com):

  • MongoDB Community Server
  • MongoDB Atlas running on AWS, Azure, and Google Cloud Platform (GCP)
  • MongoDB Enterprise Edition

Oprócz bazy część danych jest przechowywana w postaci repozytorium plików. Mieszczą się tu informacje o połączeniu z bazą danych, konfiguracji bezpieczeństwa i logowania itp.
O instalację MongoDB (podobnie jak i Java JDK) klient musi zadbać we własnym zakresie.

Ażeby dane były pobierane z różnych środowisk, na każdej maszynie trzeba zainstalować agenta OECC. Jest to lekki proces instalujący się razem z OE. Niezależnie od tego, czy masz jedną czy więcej instalacji OpenEdge na maszynie wystarczy zainstalować jednego agenta (OE 12.2.5 i wyżej).

Proces agenta działa autonomicznie; trzeba tylko upewnić się że jest poprawnie uruchomiony. Dla bezpiecznego połączenia z serwerem OECC trzeba z konsoli wygenerować unikalny klucz dla każdego agenta.

Cały proces konfiguracji i monitorowania przeprowadzamy z konsoli dostępnej z przeglądarek internetowych (HTTP/HTTPS), patrz przykład poniżej.

OpenEdge Command Center to bardzo ciekawy produkt, który obecnie monitoruje tylko procesy PASOE, ale w najbliższym czasie ma być rozszerzony także o procesy baz danych. Warto jest go zainstalować i przetestować.

1 2 3 4