1 /*
2 * Copyright (c) 1998,1999,2000
3 * Traakan, Inc., Los Altos, CA
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice unmodified, this list of conditions, and the following
11 * disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29 /*
30 * Project: NDMJOB
31 * Ident: $Id: $
32 *
33 * Description:
34 *
35 */
36
37 #include "ndmjob.h"
38
39 #ifndef NDMOS_OPTION_NO_CONTROL_AGENT
start_index_file(void)40 int start_index_file(void)
41 {
42 if (I_index_file && strcmp(I_index_file, "-") != 0) {
43 FILE* ifp;
44
45 if (atoi(I_index_file) != 0) {
46 ndmjob_log(1, "Writing index (-I%s)", I_index_file);
47 ifp = fdopen(atoi(I_index_file), "w");
48 } else {
49 ndmjob_log(1, "Writing index (-I%s)", I_index_file);
50 ifp = fopen(I_index_file, "w");
51 }
52 if (!ifp) { error_byebye("can't open -I logfile"); }
53 index_fp = ifp;
54 fprintf(ifp, "##ndmjob -I\n");
55 } else {
56 index_fp = stderr;
57 }
58
59 return 0;
60 }
61
sort_index_file(void)62 int sort_index_file(void)
63 {
64 if (I_index_file && strcmp(I_index_file, "-") != 0 &&
65 atoi(I_index_file) == 0) {
66 char cmd[512];
67
68 fprintf(index_fp, "##ndmjob -J\n"); /* sorts to 2nd line */
69 fclose(index_fp);
70 index_fp = stderr; /* in case anything else happens */
71
72 snprintf(cmd, sizeof(cmd), "LC_ALL=C sort %s -o %s\n", I_index_file,
73 I_index_file);
74 ndmjob_log(3, "sort command: %s", cmd);
75 ndmjob_log(1, "sorting index");
76 if (system(cmd) < 0) error_byebye("sort index failed");
77 ndmjob_log(1, "sort index done");
78 }
79
80 return 0;
81 }
82 #endif /* !NDMOS_OPTION_NO_CONTROL_AGENT */
83
error_byebye(char * fmt,...)84 void error_byebye(char* fmt, ...)
85 {
86 va_list ap;
87 char buf[4096];
88
89 va_start(ap, fmt);
90 vsnprintf(buf, sizeof(buf), fmt, ap);
91 va_end(ap);
92 ndmjob_log(0, "FATAL: %s", buf);
93 fprintf(stderr, "%s: %s\n", progname, buf);
94 exit(1);
95 }
96
ndmjob_log_deliver(struct ndmlog * log,char * tag,int lev,char * msg)97 void ndmjob_log_deliver(struct ndmlog* log, char* tag, int lev, char* msg)
98 {
99 char tagbuf[32];
100
101 if (the_mode == 'D') {
102 char buf[32];
103
104 snprintf(buf, sizeof(buf), "%s(%d)", tag, (int)getpid());
105 snprintf(tagbuf, sizeof(tagbuf), "%-11s", buf);
106 } else {
107 snprintf(tagbuf, sizeof(tagbuf), "%-4s", tag);
108 }
109
110 if (d_debug >= lev) {
111 if (!o_no_time_stamps) {
112 fprintf(log_fp, "%s %s %s\n", tagbuf, ndmlog_time_stamp(), msg);
113 } else {
114 fprintf(log_fp, "%s t[x] %s\n", tagbuf, msg);
115 }
116 fflush(log_fp);
117 }
118
119 if (v_verbose >= lev) {
120 printf("%s\n", msg);
121 fflush(stdout);
122 }
123 }
124
125 #ifndef NDMOS_OPTION_NO_CONTROL_AGENT
ndmjob_ixlog_deliver(struct ndmlog * log,char * tag,int lev,char * msg)126 void ndmjob_ixlog_deliver(struct ndmlog* log, char* tag, int lev, char* msg)
127 {
128 fprintf(index_fp, "%s %s\n", tag, msg);
129 fflush(index_fp); /* this doesn't change the run time */
130 }
131 #endif /* !NDMOS_OPTION_NO_CONTROL_AGENT */
132
ndmjob_log(int lev,char * fmt,...)133 void ndmjob_log(int lev, char* fmt, ...)
134 {
135 va_list ap;
136 char buf[4096];
137
138 va_start(ap, fmt);
139 vsnprintf(buf, sizeof(buf), fmt, ap);
140 va_end(ap);
141
142 ndmjob_log_deliver(&the_param.log, the_param.log_tag, lev, buf);
143 }
144