13 #include <sys/types.h> 27 const char *
const Logger::LEVEL_NAMES[] =
28 {
"NONE ",
"ALERT ",
"INFO ",
"VERBOSE",
"DEBUG " };
30 Logger * Logger::logger = NULL;
32 Logger::Logger(
int level)
37 sprintf(fout_name,
"GPUGENIE_LOG-%s.log", s.c_str());
39 ss<<
"log/"<<string(fout_name);
41 if(stat(
"log", &st) == -1)
43 strcpy(logfile_name, ss.str().c_str());
44 logfile = fopen(logfile_name,
"a");
52 void Logger::exit(
void)
56 log(VERBOSE,
"---------Exiting Logger----------");
62 Logger* Logger::_logger(
void)
67 log(VERBOSE,
"---------Starting Logger %s----------",
68 logger->logfile_name);
74 void Logger::set_level(
int level)
76 _logger()->log_level = level;
78 int Logger::get_level()
80 return _logger()->log_level;
83 void Logger::set_logfile_name(
const char * name)
85 if (strcmp(name, _logger()->logfile_name) != 0)
87 fclose(_logger()->logfile);
88 strcpy(_logger()->logfile_name, name);
89 _logger()->logfile = fopen(_logger()->logfile_name,
"a");
94 const char * Logger::get_logfile_name()
96 return _logger()->logfile_name;
99 int Logger::log(
int level,
const char *fmt, ...)
105 gettimeofday(&curTime, NULL);
106 int milli = curTime.tv_usec / 1000;
109 strftime(buffer, 80,
"%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec));
111 char currentTime[84];
112 sprintf(currentTime,
"[%s:%03d %s] ", buffer, milli, LEVEL_NAMES[level]);
113 fprintf(_logger()->logger->logfile,
"%s", currentTime);
116 vsprintf(message, fmt, args);
119 fprintf(_logger()->logger->logfile,
"%s", message);
120 fprintf(_logger()->logger->logfile,
"\n");
122 if (_logger()->logger->log_level >= level)
124 printf(
"%s", message);
135 void Logger::logQueries(
int level, std::vector<genie::query::Query> &queries,
size_t max_print_len)
139 Logger::log(level,
"Query idx: %d, topk: %d, count_ranges: %d, selectivity: %f",
140 q.index(), q.topk(), q.count_ranges(), q.selectivity());
141 q.print(max_print_len);
143 std::vector<genie::query::Query::dim> dims;
147 Logger::log(level,
" Dim -- query: %d, order: %d, start_pos: %d, end_pos: %d",
148 d.query, d.order, d.start_pos, d.end_pos);
153 void Logger::logResults(
int level, std::vector<genie::query::Query> &queries, std::vector<int> &result,
154 std::vector<int> &result_count,
size_t max_print_len)
156 size_t resultsBeginIdx = 0;
159 Logger::log(level,
"Query idx: %d, topk: %d, count_ranges: %d, selectivity: %f",
160 q.index(), q.topk(), q.count_ranges(), q.selectivity());
162 std::stringstream ss;
163 size_t noResultsToPrint = std::min(q.topk(),
static_cast<int>(max_print_len));
164 for (
size_t i = 0; i < noResultsToPrint; ++i)
165 ss << result[resultsBeginIdx+i] <<
"(" << result_count[resultsBeginIdx+i] <<
") ";
166 Logger::log(level,
" Results: %s", ss.str().c_str());
167 resultsBeginIdx += q.topk();
175 Logger::log(level,
"Inv table not built.");
181 Logger::log(level,
"Compressed table: %s",
184 Logger::log(level,
"Plain table: ");
187 std::stringstream ss;
188 std::vector<int> *ck = table->
ck();
191 auto end = (ck->size() <= max_print_len) ? ck->end() : (ck->begin() + max_print_len);
192 std::copy(ck->begin(), end, std::ostream_iterator<int>(ss,
" "));
193 Logger::log(level,
" CK:\n %s", ss.str().c_str());
194 ss.str(std::string());
197 std::vector<int> *inv_pos =
204 auto end = (inv_pos->size() <= max_print_len) ? inv_pos->end() : (inv_pos->begin() + max_print_len);
205 std::copy(inv_pos->begin(), end, std::ostream_iterator<int>(ss,
" "));
206 Logger::log(level,
" INV_POS:\n %s", ss.str().c_str());
207 ss.str(std::string());
210 std::vector<int> *inv =
217 auto end = (inv->size() <= max_print_len) ? inv->end() : (inv->begin() + max_print_len);
218 std::copy(inv->begin(), end, std::ostream_iterator<int>(ss,
" "));
219 Logger::log(level,
" INV:\n %s", ss.str().c_str());
220 ss.str(std::string());
226 std::vector<int> *compr_inv_pos = comprTable->
inv_pos();
229 auto end = (compr_inv_pos->size() <= max_print_len) ?
230 compr_inv_pos->end() : (compr_inv_pos->begin() + max_print_len);
231 std::copy(compr_inv_pos->begin(), end, std::ostream_iterator<int>(ss,
" "));
232 Logger::log(level,
" COMPR_INV_POS:\n %s", ss.str().c_str());
233 ss.str(std::string());
236 std::vector<uint32_t> *compr_inv = comprTable->
compressedInv();
239 auto end = (compr_inv->size() <= max_print_len) ? compr_inv->end() : (compr_inv->begin() + max_print_len);
241 for (
auto it = compr_inv->begin(); it != end; it++){
242 ss << std::hex << std::setfill(
'0') << std::setw(8) << *it <<
" ";
247 Logger::log(level,
" COMPR_INV:\n%s", ss.str().c_str());
248 ss.str(std::string());
255 void Logger::logInvLists(
int level,
const std::vector<std::vector<uint32_t> > &rawInvertedLists,
256 size_t max_print_len)
258 std::stringstream ss;
259 auto inv_it_end = (rawInvertedLists.size() <= max_print_len)
260 ? rawInvertedLists.end() : (rawInvertedLists.begin() + max_print_len);
261 Logger::log(level,
"rawInvertedLists.size(): %d", rawInvertedLists.size());
262 for (
auto inv_it = rawInvertedLists.begin(); inv_it != inv_it_end; inv_it++)
264 const std::vector<uint32_t> &invList = *inv_it;
265 auto end = (invList.size() <= max_print_len) ? invList.end() : (invList.begin() + max_print_len);
266 std::copy(invList.begin(), end, std::ostream_iterator<uint32_t>(ss,
" "));
267 Logger::log(level,
"*** [%s]", ss.str().c_str());
268 ss.str(std::string());
virtual std::vector< int > * inv_pos()
The declaration for class inv_table.
std::vector< uint32_t > * compressedInv()
genie::compression::COMPRESSION_TYPE getCompression() const
Declaration of query class.
virtual std::vector< int > * inv_pos()
virtual std::vector< int > * ck()
std::vector< int > * uncompressedInvPos()
std::string currentDateTime()
Get current data time.
A utility class to record logs into disk files.
virtual std::vector< int > * inv()
Record run-time information.
The second-step struct for processing queries.
Functions about getting system time.
std::vector< int > * uncompressedInv()
define class inv_compre_table
static std::string getCompressionName(COMPRESSION_TYPE type)