16 septembre 2020

log4j : Envoi de mail sur présence d'une erreur fatale

Le guide technique présente une astuce pour remonter un incident Java par mail via le fichier log4j (typiquement en cas d'erreur fatale de l'application). Utile si vous ne disposez pas d'outil de surveillance sur la machine.

Ci dessous un exemple avec le serveur HRD Query :

Mises à jour dans le fichier query/conf/query_log.properties

  • Au niveau des loggers :

# Ajout de la sortie "mail"
log4j.rootLogger = INFO, consoleappender, fileappender, mailappender
log4j.logger.com.hraccess = INFO, consoleappender, fileappender, mailappender

  • Ajout de la définition de l'appender :


# appender MAIL
# Définition du niveau de trace de l'appender
log4j.appender.mailappender.Threshold=FATAL
# Définition du type d'appender

log4j.appender.mailappender=org.apache.log4j.net.SMTPAppender
# Formatage des messages
log4j.appender.mailappender.layout=org.apache.log4j.PatternLayout
log4j.appender.mailappender.layout.ConversionPattern=%d [%t] %-5p %c -%m%n

# Destinataire,
Emetteur, Sujet du mail
log4j.appender.mailappender.To=admin@digix.com,john.doe@digix.com
log4j.appender.mailappender.Fr
om=nePasRepondre@digix.com
log4j.appender.mailappender.Subject=Erreur Fatale HRD Query
# Serveur de courrier de l'entreprise
log4j.appender.mailappender.SMTPHost=
smtp.digix.com

  •  Arrêt / démarrage du serveur HRDQuery

 

9 septembre 2020

make - erreur fatale: sqlcpr.h : Aucun fichier ou dossier de ce type

Sur une de mes plateformes, lors de la recompilation de programmes C (make all), des erreurs apparaissent sur les programmes DNA4 et DNA8 :

---
---    APC.c   -->  APC.o
---
cc -D_SIGA_TYPE_MONO -m64 -fPIC -c APC.c
cc -D_SIGA_TYPE_MONO -m64 -fPIC  -O             -c -o DNA4.o DNA4.c
DNA4.c:334:22: erreur fatale: sqlcpr.h : Aucun fichier ou dossier de ce type
 #  include <sqlcpr.h>
                      ^
compilation terminée.
make: *** [DNA4.o] Erreur 1

et

DNA8.c:394:22: erreur fatale: sqlcpr.h : Aucun fichier ou dossier de ce type
 #  include <sqlcpr.h>
                      ^
compilation terminée.
make: *** [DNA8.o] Erreur 1

Il se trouve que le répertoire contient des fichiers source DNA*.c et des DNA*.pc

Ces sources nécessitent une précompilation Oracle.
Pour que le makefile considère en priorité les sources ".pc" il faut donc :

  • soit retirer les ".c" (rm)
  • soit mettre à jour l'horodatage des ".pc" (touch).

Sans cela c'est une commande de compilation C classique qui est lancée, et les appels Oracle ne sont pas compris. 


Exemple :

rm -f DNA4.c

make DNA4.o

---
---    DNA4.pc   -->  DNA4.o
---

Pro*C/C++: Release 19.0.0.0.0 - Production on Wed Sep 9 14:52:59 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

System default option values taken from: /app/oracle/client/product/19.0.0/client_1/precomp/admin/pcscfg.cfg

cc -D_SIGA_TYPE_MONO -m64 -fPIC -c  -I/app/oracle/client/product/19.0.0/client_1/precomp/hdrs  -I/app/oracle/client/product/19.0.0/client_1/precomp/public -I/app/oracle/client/product/19.0.0/client_1/precomp/include   -I/app/oracle/client/product/19.0.0/client_1/oracore/include -I/app/oracle/client/product/19.0.0/client_1/oracore/public -I/app/oracle/client/product/19.0.0/client_1/oracore/port/include -I/app/oracle/client/product/19.0.0/client_1/xdk/include -I/app/oracle/client/product/19.0.0/client_1/xdk/public -I/app/oracle/client/product/19.0.0/client_1/nlsrtl/include  -I/app/oracle/client/product/19.0.0/client_1/ldap/public/sslinc -I/app/oracle/client/product/19.0.0/client_1/ldap/include/sslinc -I/app/oracle/client/product/19.0.0/client_1/ldap/include/cryptoinc  -I/app/oracle/client/product/19.0.0/client_1/slax/include   -I. DNA4.c

ls -lrt DNA4*
18536 2016-12-15 15:37 DNA4.pc
    0 2020-09-09 14:52 DNA4.lis
35270 2020-09-09 14:52 DNA4.c
18608 2020-09-09 14:52 DNA4.o

Une autre option est de préciser explicitement dans le $SIGACS/adm/src/Makefile la règle de compilation pour ces programmes. Ajouter alors (avant la règle ".pc.o:  $(*).pc") deux chapitres sur le modèle de celui indiquant la règle ".pc.o:  $(*).pc".

Dans mon cas :

#----------------------------------------------------------------
#       Build the object module DNA4.o
#
DNA4.o: DNA4.pc
        @echo "--- "
        @echo "---    DNA4.pc   -->  DNA4.o "
        @echo "--- "
        @$(PROC) $(PCCFLAGS) iname=DNA4.pc oname=DNA4.c
        $(CC) -c $(DEFINE_PROC) $(INCLUDE) DNA4.c
#----------------------------------------------------------------
#       Build the object module DNA8.o
#
DNA8.o: DNA8.pc
        @echo "--- "
        @echo "---    DNA8.pc   -->  DNA8.o "
        @echo "--- "
        @$(PROC) $(PCCFLAGS) iname=DNA8.pc oname=DNA8.c
        $(CC) -c $(DEFINE_PROC) $(INCLUDE) DNA8.c


2 juillet 2020

HRaSpace - Mes rapports - a runtime error occured in hr-portlets application

Dans HRaSpace, application "Mes rapports"
Lors de la recherche des rapports disponibles, une pop-up d'erreur technique apparaît :



Dans les logs de hr-portlets en mode DEBUG l'application fait apparaître :

DEBUG prtlt - Selecting queries with SQL statement <SELECT A.NUDOSS, A.CDELMT, A.LISOUM, A.CDACTV, F.ZOATTR AS ROLLOC, P.LIETAT FROM ZO00 A, ZO3X F, ZO5X G, ZO3P P WHERE A.NUDOSS=F.NUDOSS AND A.NUDOSS=G.NUDOSS AND A.NUDOSS=P.NUDOSS AND A.TYTMPL=<QB>T<QE> AND A.FLGJOB=<QB>0<QE> AND A.CDPHAS=<QB>NPQ<QE> AND (P.CDLANU=<QB>F<QE> OR P.CDLANU=<QB> <QE>) AND G.TYPUSE IN (<QB>T<QE>,<QB>D<QE>,<QB>A<QE>,<QB>O<QE>,<QB>E<QE>,<QB>M<QE>) AND EXISTS (SELECT 1 FROM ZO3X E WHERE A.NUDOSS=E.NUDOSS AND E.TYATTR=<QB>HRDROLECATEGORY<QE> AND E.ZOATTR=<QB>HRREP<QE>) AND EXISTS (SELECT 1 FROM ZO3X D WHERE A.NUDOSS=D.NUDOSS AND D.TYATTR=<QB>HRDACCESSMODE<QE> AND (D.ZOATTR=<QB>FREE<QE> OR D.ZOATTR=<QB>MIXED<QE>)) AND A.CDACTV IN (<QB> <QE>, <QB>0EVALPR<QE>, <QB>0GOSEPR<QE>, <QB>5GTAFD01<QE>,
...
, <QB>YCOPTYAP<QE>) AND F.TYATTR=<QB>HRDLOCALIZATION<QE> AND F.ZOATTR IN (<QB>CO<QE>, <QB>FT<QE>) AND UPPER(A.CDELMT)  LIKE <QB>%%<QE>  ORDER BY NUDOSS, ROLLOC>

Après ouverture d'un incident auprès du support, l'explication donnée :
Il s'avère que la requête contruite afin d'extraire les rapports accessibles (application de la confidentialité) à l'utilisateur présente une longueur de plus de 15000 caractères et dépasse donc la longueur maximum supportée soit de 9999

Ceci est du au fait que 815 activités sont associées à l'utilisateur au travers de ses rôles.
Nous vous invitons donc à revoir la confidentialité de cette utilisateur