add logging struct with -u json options flag, log tiling progress [#13]

This commit is contained in:
Brandon Liu 2022-07-05 12:01:56 +08:00
parent 4adb22b74e
commit f442e403c5
8 changed files with 41 additions and 1 deletions

View File

@ -47,7 +47,7 @@ C = $(wildcard *.c) $(wildcard *.cpp)
INCLUDES = -I/usr/local/include -I.
LIBS = -L/usr/local/lib
tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o dirtiles.o plugin.o read_json.o write_json.o geobuf.o flatgeobuf.o evaluator.o geocsv.o csv.o geojson-loop.o
tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o dirtiles.o plugin.o read_json.o write_json.o geobuf.o flatgeobuf.o evaluator.o geocsv.o csv.o geojson-loop.o json_logger.o
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread
tippecanoe-enumerate: enumerate.o

View File

@ -529,6 +529,7 @@ the same layer, enclose them in an `all` expression so they will all be evaluate
* `-q` or `--quiet`: Work quietly instead of reporting progress or warning messages
* `-Q` or `--no-progress-indicator`: Don't report progress, but still give warnings
* `-U` _seconds_ or `--progress-interval=`_seconds_: Don't report progress more often than the specified number of _seconds_.
* `-u` or `--json-progress`: like `-quiet` but logs progress as a JSON object. Use in combination with `-U`.
* `-v` or `--version`: Report Tippecanoe's version number
### Filters

8
json_logger.cpp Normal file
View File

@ -0,0 +1,8 @@
#include <stdarg.h>
#include <fstream>
#include "json_logger.hpp"
void json_logger::progress_tile(double progress) {
fprintf(stderr,"{\"progress\":%3.1f}\n",progress);
}

13
json_logger.hpp Normal file
View File

@ -0,0 +1,13 @@
#include <iostream>
#ifndef LOGGING_HPP
#define LOGGING_HPP
struct json_logger {
bool json_enabled = false;
void progress_tile(double progress);
};
#endif

View File

@ -69,6 +69,7 @@ static int min_detail = 7;
int quiet = 0;
int quiet_progress = 0;
json_logger logger;
double progress_interval = 0;
std::atomic<double> last_progress(0);
int geometry_scale = 0;
@ -2690,6 +2691,7 @@ int main(int argc, char **argv) {
{"quiet", no_argument, 0, 'q'},
{"no-progress-indicator", no_argument, 0, 'Q'},
{"progress-interval", required_argument, 0, 'U'},
{"json-progress", no_argument, 0, 'u'},
{"version", no_argument, 0, 'v'},
{"", 0, 0, 0},
@ -3003,6 +3005,11 @@ int main(int argc, char **argv) {
quiet_progress = 1;
break;
case 'u':
quiet = 1;
logger.json_enabled = true;
break;
case 'U':
progress_interval = atof_require(optarg, "Progress interval");
break;

View File

@ -5,6 +5,8 @@
#include <atomic>
#include <string>
#include "json_logger.hpp"
struct index {
long long start = 0;
long long end = 0;
@ -38,6 +40,7 @@ void checkdisk(std::vector<struct reader> *r);
extern int geometry_scale;
extern int quiet;
extern int quiet_progress;
extern json_logger logger;
extern double progress_interval;
extern std::atomic<double> last_progress;

View File

@ -687,6 +687,8 @@ If you don't specify, it will use \fB\fC/tmp\fR\&.
.IP \(bu 2
\fB\fC\-U\fR \fIseconds\fP or \fB\fC\-\-progress\-interval=\fR\fIseconds\fP: Don't report progress more often than the specified number of \fIseconds\fP\&.
.IP \(bu 2
\fB\fC\-u\fR or \fB\fC\-\-json\-progress\fR: like \fB\fC\-quiet\fR but logs progress as a JSON object. Use in combination with \fB\fC\-U\fR\&.
.IP \(bu 2
\fB\fC\-v\fR or \fB\fC\-\-version\fR: Report Tippecanoe's version number
.RE
.SS Filters

View File

@ -1330,6 +1330,9 @@ serial_feature next_feature(FILE *geoms, std::atomic<long long> *geompos_in, cha
if (!quiet && !quiet_progress && progress_time()) {
fprintf(stderr, " %3.1f%% %d/%u/%u \r", progress, z, tx, ty);
}
if (logger.json_enabled && progress_time()) {
logger.progress_tile(progress);
}
*oprogress = progress;
}
@ -2325,6 +2328,9 @@ long long write_tile(FILE *geoms, std::atomic<long long> *geompos_in, char *meta
if (!quiet && !quiet_progress && progress_time()) {
fprintf(stderr, " %3.1f%% %d/%u/%u \r", progress, z, tx, ty);
}
if (logger.json_enabled && progress_time()) {
logger.progress_tile(progress);
}
oprogress = progress;
}