All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.kestra.plugin.dbt.cli.LogService Maven / Gradle / Ivy

The newest version!
package io.kestra.plugin.dbt.cli;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.kestra.core.models.executions.metrics.Counter;
import io.kestra.core.runners.RunContext;
import io.kestra.core.serializers.JacksonMapper;

import java.util.HashMap;
import java.util.Map;

class LogService {
    static final protected ObjectMapper MAPPER = JacksonMapper.ofJson()
        .setSerializationInclusion(JsonInclude.Include.NON_NULL);

    @SuppressWarnings("unchecked")
    protected static void parse(RunContext runContext, String line) {
        try {
            Map jsonLog = (Map) MAPPER.readValue(line, Object.class);

            String level;
            String ts;
            String thread;
            String type;
            String msg;
            HashMap additional = new HashMap<>();

            if (jsonLog.containsKey("info")) {
                Map infoLog = (Map) jsonLog.get("info");

                level = (String) infoLog.get("level");
                ts = (String) infoLog.get("ts");
                thread = (String) infoLog.get("thread");
                type = (String) infoLog.get("name");
                msg = (String) infoLog.get("msg");

                additional.putAll(infoLog);
            } else {
                level = (String) jsonLog.get("level");
                ts = (String) jsonLog.get("ts");
                thread = (String) jsonLog.get("thread_name");
                type = (String) jsonLog.get("type");
                msg = (String) jsonLog.get("msg");
            }

            additional.remove("category");
            additional.remove("code");
            additional.remove("invocation_id");
            additional.remove("level");
            additional.remove("log_version");
            additional.remove("code");
            additional.remove("msg");
            additional.remove("thread");
            additional.remove("thread_name");
            additional.remove("type");
            additional.remove("name");
            additional.remove("ts");
            additional.remove("pid");
            additional.remove("extra");

            String format = "[Date: {}] [Thread: {}] [Type: {}] {}{}";
            String[] args = new String[]{
                ts,
                thread,
                type,
                msg != null ? msg + " " : "",
                !additional.isEmpty() ? additional.toString() : ""
            };

            if (jsonLog.containsKey("data")) {
                Map data = (Map) jsonLog.get("data");

                if (data.containsKey("stats")) {
                    Map stats  = (Map) data.get("stats");

                    stats.forEach((s, integer) -> {
                        runContext.metric(Counter.of(s, integer));
                    });
                }
            }

            switch (level) {
                case "debug":
                    runContext.logger().debug(format, (Object[]) args);
                    break;
                case "info":
                    runContext.logger().info(format, (Object[]) args);
                    break;
                case "warning":
                    runContext.logger().warn(format, (Object[]) args);
                    break;
                default:
                    runContext.logger().error(format, (Object[]) args);
            }
        } catch (Throwable e) {
            runContext.logger().info(line.trim());
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy