// Path: hangout-core/src/main/java/com/ctrip/ops/sysdev/baseplugin/BaseOutput.java
// @Log4j2
// public abstract class BaseOutput extends Base {
//     protected Map config;
//     protected List<TemplateRender> IF;
// 
//     public BaseOutput(Map config) {
//         super(config);
// 
//         this.config = config;
// 
// 
//         if (this.config.containsKey("if")) {
//             IF = new ArrayList<TemplateRender>();
//             for (String c : (List<String>) this.config.get("if")) {
//                 try {
//                     IF.add(new FreeMarkerRender(c, c));
//                 } catch (IOException e) {
//                     log.fatal(e.getMessage());
//                     System.exit(1);
//                 }
//             }
//         } else {
//             IF = null;
//         }
// 
//         this.prepare();
//     }
// 
//     protected abstract void prepare();
// 
//     protected abstract void emit(Map event);
// 
//     public void shutdown() {
//         log.info("shutdown" + this.getClass().getName());
//     }
// 
//     public void process(Map event) {
//         boolean ifSuccess = true;
//         if (this.IF != null) {
//             for (TemplateRender render : this.IF) {
//                 if (!render.render(event).equals("true")) {
//                     ifSuccess = false;
//                     break;
//                 }
//             }
//         }
//         if (ifSuccess) {
//             this.emit(event);
//             if (this.enableMeter) {
//                 this.meter.mark();
//             }
//         }
//     }
// }
// 
// Path: hangout-core/src/main/java/com/ctrip/ops/sysdev/render/TemplateRender.java
// public interface TemplateRender {
//     Pattern p = Pattern.compile("\\[\\S+\\]+");
// 
//     public Object render(Map event);
// 
//     static public TemplateRender getRender(Object template) throws IOException {
//         if (!String.class.isAssignableFrom(template.getClass())) {
//             return new DirectRender(template);
//         }
//         if (p.matcher((String) template).matches()) {
//             return new FieldRender((String) template);
//         }
// 
//         return new FreeMarkerRender((String) template, (String) template);
// 
//     }
// 
// 
//     static public TemplateRender getRender(String template, boolean ignoreOneLevelRender) throws IOException {
//         if (ignoreOneLevelRender == true) {
//             return getRender(template);
//         }
// 
//         if (!String.class.isAssignableFrom(template.getClass())) {
//             return new DirectRender(template);
//         }
//         if (p.matcher(template).matches()) {
//             return new FieldRender(template);
//         }
//         if (template.contains("$")) {
//             return new FreeMarkerRender(template, template);
//         }
//         return new OneLevelRender(template);
//     }
// 
// 
//     static public TemplateRender getRender(String template, String timezone) throws IOException {
//         Pattern p = Pattern.compile("\\%\\{\\+.*?\\}");
//         if (p.matcher(template).find()) {
//             return new DateFormatter(template, timezone);
//         }
//         return getRender(template);
//     }
// }


import com.ctrip.ops.sysdev.baseplugin.BaseOutput;
import com.ctrip.ops.sysdev.render.TemplateRender;
import lombok.extern.log4j.Log4j2;
import org.elasticsearch.action.DocWriteRequest;
import org.elasticsearch.action.bulk.*;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.unit.ByteSizeUnit;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.elasticsearch.client.transport.NoNodeAvailableException;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
package com.ctrip.ops.sysdev.outputs;




/**
 * @author liujia
 */
@Log4j2
public class Elasticsearch extends BaseOutput {
    private final static int BULKACTION = 20000;
    private final static int BULKSIZE = 15; //MB
    private final static int FLUSHINTERVAL = 10;
    private final static int CONCURRENTREQSIZE = 0;
    private final static boolean DEFAULTSNIFF = true;
    private final static boolean DEFAULTCOMPRESS = false;

// Path: hangout-core/src/main/java/com/ctrip/ops/sysdev/baseplugin/BaseOutput.java
// @Log4j2
// public abstract class BaseOutput extends Base {
//     protected Map config;
//     protected List<TemplateRender> IF;
// 
//     public BaseOutput(Map config) {
//         super(config);
// 
//         this.config = config;
// 
// 
//         if (this.config.containsKey("if")) {
//             IF = new ArrayList<TemplateRender>();
//             for (String c : (List<String>) this.config.get("if")) {
//                 try {
//                     IF.add(new FreeMarkerRender(c, c));
//                 } catch (IOException e) {
//                     log.fatal(e.getMessage());
//                     System.exit(1);
//                 }
//             }
//         } else {
//             IF = null;
//         }
// 
//         this.prepare();
//     }
// 
//     protected abstract void prepare();
// 
//     protected abstract void emit(Map event);
// 
//     public void shutdown() {
//         log.info("shutdown" + this.getClass().getName());
//     }
// 
//     public void process(Map event) {
//         boolean ifSuccess = true;
//         if (this.IF != null) {
//             for (TemplateRender render : this.IF) {
//                 if (!render.render(event).equals("true")) {
//                     ifSuccess = false;
//                     break;
//                 }
//             }
//         }
//         if (ifSuccess) {
//             this.emit(event);
//             if (this.enableMeter) {
//                 this.meter.mark();
//             }
//         }
//     }
// }
// 
// Path: hangout-core/src/main/java/com/ctrip/ops/sysdev/render/TemplateRender.java
// public interface TemplateRender {
//     Pattern p = Pattern.compile("\\[\\S+\\]+");
// 
//     public Object render(Map event);
// 
//     static public TemplateRender getRender(Object template) throws IOException {
//         if (!String.class.isAssignableFrom(template.getClass())) {
//             return new DirectRender(template);
//         }
//         if (p.matcher((String) template).matches()) {
//             return new FieldRender((String) template);
//         }
// 
//         return new FreeMarkerRender((String) template, (String) template);
// 
//     }
// 
// 
//     static public TemplateRender getRender(String template, boolean ignoreOneLevelRender) throws IOException {
//         if (ignoreOneLevelRender == true) {
//             return getRender(template);
//         }
// 
//         if (!String.class.isAssignableFrom(template.getClass())) {
//             return new DirectRender(template);
//         }
//         if (p.matcher(template).matches()) {
//             return new FieldRender(template);
//         }
//         if (template.contains("$")) {
//             return new FreeMarkerRender(template, template);
//         }
//         return new OneLevelRender(template);
//     }
// 
// 
//     static public TemplateRender getRender(String template, String timezone) throws IOException {
//         Pattern p = Pattern.compile("\\%\\{\\+.*?\\}");
//         if (p.matcher(template).find()) {
//             return new DateFormatter(template, timezone);
//         }
//         return getRender(template);
//     }
// }


// Path: hangout-output-plugins/hangout-output-plugins-elasticsearch/src/main/java/com/ctrip/ops/sysdev/outputs/Elasticsearch.java
import com.ctrip.ops.sysdev.baseplugin.BaseOutput;
import com.ctrip.ops.sysdev.render.TemplateRender;
import lombok.extern.log4j.Log4j2;
import org.elasticsearch.action.DocWriteRequest;
import org.elasticsearch.action.bulk.*;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.unit.ByteSizeUnit;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.elasticsearch.client.transport.NoNodeAvailableException;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

package com.ctrip.ops.sysdev.outputs;




/**
 * @author liujia
 */
@Log4j2
public class Elasticsearch extends BaseOutput {
    private final static int BULKACTION = 20000;
    private final static int BULKSIZE = 15; //MB
    private final static int FLUSHINTERVAL = 10;
    private final static int CONCURRENTREQSIZE = 0;
    private final static boolean DEFAULTSNIFF = true;
    private final static boolean DEFAULTCOMPRESS = false;

    private TemplateRender indexRender;