log: error code generation support
error code and message are generated at compile time by reading a json file which contains information of elements for each error code. This framework provides error handling and ability to do more cleaner log messages to users. error-codes.json file contains error description is below format { "ERR_NAME": {"code": ERR_NUM, "message": {"LOCALE": "ERR_MESSAGE"}} } At compile time autogen.sh calls gen-headers.py which produces C header file libglusterfs/src/gf-error-codes.h. This header has a function const char *_gf_get_message (int code); which returns respective ERR_MESSAGE for given ERR_NUM. Change-Id: Ieefbf4c470e19a0175c28942e56cec98a3c94ff0 BUG: 928648 Signed-off-by: Bala.FA <barumuga@redhat.com> Reviewed-on: http://review.gluster.org/4977 Reviewed-by: Niels de Vos <ndevos@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
This commit is contained in:
parent
4c0f4c8a89
commit
f75957ab6b
@ -1,7 +1,9 @@
|
||||
EXTRA_DIST = autogen.sh \
|
||||
COPYING-GPLV2 COPYING-LGPLV3 \
|
||||
INSTALL README AUTHORS THANKS NEWS \
|
||||
glusterfs.spec glusterfs-api.pc.in
|
||||
glusterfs.spec glusterfs-api.pc.in \
|
||||
error-codes.json gf-error-codes.h.template \
|
||||
gen-headers.py
|
||||
|
||||
SUBDIRS = argp-standalone libglusterfs rpc api xlators glusterfsd \
|
||||
$(FUSERMOUNT_SUBDIR) doc extras cli
|
||||
|
10
autogen.sh
10
autogen.sh
@ -75,6 +75,16 @@ if [ "x$MISSING" != "x" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
## generate gf-error-codes.h from error-codes.json
|
||||
echo "Generate gf-error-codes.h ..."
|
||||
if ./gen-headers.py; then
|
||||
if ! mv -fv gf-error-codes.h libglusterfs/src/gf-error-codes.h; then
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
## Do the autogeneration
|
||||
echo Running ${ACLOCAL}...
|
||||
$ACLOCAL -I ./contrib/aclocal
|
||||
|
4
error-codes.json
Normal file
4
error-codes.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"ERR_DEV": {"code": 9999,
|
||||
"message": {"en": "devel error"}}
|
||||
}
|
54
gen-headers.py
Executable file
54
gen-headers.py
Executable file
@ -0,0 +1,54 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import sys
|
||||
try:
|
||||
import json
|
||||
except ImportError:
|
||||
import simplejson as json
|
||||
from string import Template
|
||||
|
||||
|
||||
def getLogBook(logFile='error-codes.json'):
|
||||
fp = open(logFile)
|
||||
return json.load(fp)
|
||||
|
||||
|
||||
def genCHeader(logBook,
|
||||
infile='gf-error-codes.h.template',
|
||||
outfile='gf-error-codes.h'):
|
||||
fp = open('gf-error-codes.h.template')
|
||||
s = fp.read()
|
||||
fp.close()
|
||||
template = Template(s)
|
||||
|
||||
defineLines = []
|
||||
caseLines = []
|
||||
for name, value in logBook.iteritems():
|
||||
nameDef = "GF_%s" % (name.upper(),)
|
||||
code = value['code']
|
||||
msgNameDef = "%s_MSG" % (nameDef,)
|
||||
msg = value['message']['en']
|
||||
|
||||
defineLines.append("#define %-20s %d" % (nameDef, code))
|
||||
defineLines.append("#define %-20s %s" % (msgNameDef,
|
||||
json.dumps(msg)))
|
||||
caseLines.append(" case %s: return _(%s);" % \
|
||||
(nameDef, msgNameDef))
|
||||
|
||||
d = {'DEFINES': "\n".join(defineLines),
|
||||
'CASES': "\n".join(caseLines)}
|
||||
#print template.substitute(d)
|
||||
|
||||
fp = open(outfile, 'w')
|
||||
fp.write(template.substitute(d))
|
||||
fp.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
logBook = getLogBook()
|
||||
genCHeader(logBook)
|
||||
sys.exit(0)
|
||||
except IOError, e:
|
||||
print str(e)
|
||||
sys.exit(-1)
|
33
gf-error-codes.h.template
Normal file
33
gf-error-codes.h.template
Normal file
@ -0,0 +1,33 @@
|
||||
/***************************************************************/
|
||||
/** **/
|
||||
/** DO NOT EDIT THIS FILE **/
|
||||
/** THIS IS AUTO-GENERATED FROM LOG BOOK **/
|
||||
/** YOUR CHANGES WILL BE LOST IN NEXT BUILD **/
|
||||
/** **/
|
||||
/***************************************************************/
|
||||
|
||||
#ifndef _GF_ERROR_CODES_H
|
||||
#define _GF_ERROR_CODES_H
|
||||
|
||||
#include <libintl.h>
|
||||
|
||||
#define _(STRING) gettext(STRING)
|
||||
|
||||
|
||||
/** START: ERROR CODE DEFINITIONS **/
|
||||
$DEFINES
|
||||
/** END: ERROR CODE DEFINITIONS **/
|
||||
|
||||
|
||||
/** START: FUNCTION RETURNS MESSAGE OF GIVEN ERROR CODE **/
|
||||
const char *
|
||||
_gf_get_message (int code) {
|
||||
switch (code) {
|
||||
$CASES
|
||||
default: return NULL;
|
||||
}
|
||||
}
|
||||
/** END: FUNCTION RETURNS MESSAGE OF GIVEN ERROR CODE **/
|
||||
|
||||
|
||||
#endif
|
@ -69,6 +69,9 @@ Source0: @PACKAGE_NAME@-@PACKAGE_VERSION@.tar.gz
|
||||
|
||||
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
||||
|
||||
%if ( 0%{?rhel} && 0%{?rhel} <= 5 )
|
||||
BuildRequires: python-simplejson
|
||||
%endif
|
||||
%if ( 0%{?_with_systemd:1} )
|
||||
BuildRequires: systemd-units
|
||||
Requires(post): systemd-units
|
||||
|
@ -29,7 +29,7 @@ libglusterfs_la_SOURCES = dict.c xlator.c logging.c \
|
||||
event-poll.c event-epoll.c
|
||||
|
||||
|
||||
nodist_libglusterfs_la_SOURCES = y.tab.c graph.lex.c
|
||||
nodist_libglusterfs_la_SOURCES = y.tab.c graph.lex.c gf-error-codes.h
|
||||
|
||||
BUILT_SOURCES = graph.lex.c
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user