mirror of https://github.com/sipwise/heartbeat.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
3.4 KiB
167 lines
3.4 KiB
/*
|
|
* ha_logger.c utility to log a message to the logging daemon
|
|
*
|
|
* Copyright (C) 2004 Guochun Shi <gshi@ncsa.uiuc.edu>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
*/
|
|
#include <lha_internal.h>
|
|
#include <glib.h>
|
|
#include <clplumbing/cl_log.h>
|
|
#include <clplumbing/ipc.h>
|
|
#include <clplumbing/GSource.h>
|
|
#include <clplumbing/cl_malloc.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <stdio.h>
|
|
#include <clplumbing/loggingdaemon.h>
|
|
#include <syslog.h>
|
|
#include <string.h>
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <errno.h>
|
|
#include <netinet/in.h>
|
|
|
|
#define EXIT_OK 0
|
|
#define EXIT_FAIL 1
|
|
|
|
int LogToDaemon(int priority, const char * buf, int bstrlen, gboolean use_pri_str);
|
|
void cl_log(int priority, const char * fmt, ...) G_GNUC_PRINTF(2,3);
|
|
static void
|
|
usage(void)
|
|
{
|
|
printf("usage: "
|
|
"ha_logger [-t tag] [-D <ha-log/ha-debug>] [message]\n");
|
|
return;
|
|
}
|
|
int
|
|
main(int argc, char** argv)
|
|
{
|
|
int priority;
|
|
char* entity = NULL;
|
|
int c;
|
|
char buf[1024];
|
|
const char* logtype = "ha-log";
|
|
|
|
|
|
while (( c =getopt(argc, argv,"t:D:h")) != -1){
|
|
switch(c){
|
|
|
|
case 't':
|
|
entity = optarg;
|
|
break;
|
|
case 'D':
|
|
logtype=optarg;
|
|
break;
|
|
case 'h':
|
|
usage();
|
|
exit(1);
|
|
default:
|
|
usage();
|
|
exit(1);
|
|
}
|
|
|
|
}
|
|
|
|
if(!cl_log_test_logd()){
|
|
fprintf(stderr, "logd is not running");
|
|
return EXIT_FAIL;
|
|
}
|
|
|
|
argc -=optind;
|
|
argv += optind;
|
|
|
|
if (entity != NULL){
|
|
cl_log_set_entity(entity);
|
|
}
|
|
|
|
if (strcmp(logtype, "ha-log") == 0){
|
|
priority = LOG_INFO;
|
|
} else if (strcmp(logtype, "ha-debug") == 0){
|
|
priority = LOG_DEBUG;
|
|
}else{
|
|
goto err_exit;
|
|
}
|
|
|
|
if (argc > 0){
|
|
|
|
register char *p, *endp;
|
|
int len;
|
|
|
|
for (p = buf, endp = buf + sizeof(buf) - 2; *argv;) {
|
|
len = strlen(*argv);
|
|
if (p + len > endp && p > buf) {
|
|
if (LogToDaemon(priority,buf,
|
|
strnlen(buf, 1024),FALSE) ==HA_OK){
|
|
continue;
|
|
}else{
|
|
return EXIT_FAIL;
|
|
}
|
|
p = buf;
|
|
}
|
|
if (len > sizeof(buf) - 1) {
|
|
if (LogToDaemon(priority,*argv,
|
|
strnlen(*argv, 1024),FALSE) ==HA_OK){
|
|
argv++;
|
|
continue;
|
|
}else{
|
|
return EXIT_FAIL;
|
|
}
|
|
|
|
} else {
|
|
if (p != buf){
|
|
*p++ = ' ';
|
|
}
|
|
memcpy(p, *argv++, len);
|
|
*(p += len) = '\0';
|
|
}
|
|
}
|
|
if (p != buf) {
|
|
if (LogToDaemon(priority,buf,
|
|
strnlen(buf, 1024),FALSE) ==HA_OK){
|
|
return EXIT_OK;
|
|
}else{
|
|
return EXIT_FAIL;
|
|
}
|
|
}
|
|
|
|
|
|
}else {
|
|
while (fgets(buf, sizeof(buf), stdin) != NULL) {
|
|
/* glibc is buggy and adds an additional newline,
|
|
so we have to remove it here until glibc is fixed */
|
|
int len = strlen(buf);
|
|
|
|
if (len > 0 && buf[len - 1] == '\n')
|
|
buf[len - 1] = '\0';
|
|
|
|
if (LogToDaemon(priority, buf,strlen(buf), FALSE) == HA_OK){
|
|
continue;
|
|
}else {
|
|
return EXIT_FAIL;
|
|
}
|
|
}
|
|
|
|
return EXIT_OK;
|
|
}
|
|
|
|
err_exit:
|
|
usage();
|
|
return(1);
|
|
|
|
}
|
|
|