// Path: src/main/java/com/yiji/falcon/agent/falcon/FalconReportObject.java
// @Data
// public class FalconReportObject implements Cloneable{
// 
//     /**
//      *  标明Metric的主体(属主)，比如metric是cpu_idle，那么Endpoint就表示这是哪台机器的cpu_idle
//      */
//     private String endpoint;
//     /**
//      * 最核心的字段，代表这个采集项具体度量的是什么, 比如是cpu_idle呢，还是memory_free, 还是qps
//      */
//     private String metric;
//     /**
//      * 表示汇报该数据时的unix时间戳，注意是整数，代表的是秒
//      */
//     private long timestamp;
//     /**
//      * 表示该数据采集项的汇报周期，这对于后续的配置监控策略很重要，必须明确指定。
//      */
//     private int step;
//     /**
//      * 代表该metric在当前时间点的值,数值类型
//      */
//     private String value;
//     /**
//      * 只能是COUNTER或者GAUGE二选一，前者表示该数据采集项为计时器类型，后者表示其为原值 (注意大小写)
//      GAUGE：即用户上传什么样的值，就原封不动的存储
//      COUNTER：指标在存储和展现的时候，会被计算为speed，即（当前值 - 上次值）/ 时间间隔
//      */
//     private CounterType counterType;
//     /**
//      * 一组逗号分割的键值对, 对metric进一步描述和细化, 可以是空字符串. 比如idc=lg，比如service=xbox等，多个tag之间用逗号分割
//      */
//     private String tags;
// 
//     /**
//      * 仅供系统使用
//      */
//     private ObjectName objectName;
// 
//     @Override
//     public FalconReportObject clone() {
//         try {
//             return (FalconReportObject) super.clone();
//         } catch (CloneNotSupportedException e) {
//             return new FalconReportObject();
//         }
//     }
// 
//     /**
//      * 添加tag
//      * @param newTag
//      * @return
//      */
//     public FalconReportObject appendTags(String newTag){
//         if(!StringUtils.isEmpty(newTag)){
//             if(StringUtils.isEmpty(this.getTags())){
//                 this.setTags(newTag);
//             }else{
//                 this.setTags(this.getTags() + "," + newTag);
//             }
//         }
//         return this;
//     }
// 
// }
// 
// Path: src/main/java/com/yiji/falcon/agent/vo/jdbc/JDBCConnectionInfo.java
// @Data
// public class JDBCConnectionInfo {
//     private String url;
//     private String username;
//     private String password;
// 
//     public JDBCConnectionInfo(String url, String username, String password) {
//         this.url = url;
//         this.username = username;
//         this.password = password;
//     }
// }


import com.yiji.falcon.agent.falcon.FalconReportObject;
import com.yiji.falcon.agent.vo.jdbc.JDBCConnectionInfo;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
/*
 * www.yiji.com Inc.
 * Copyright (c) 2016 All Rights Reserved
 */
package com.yiji.falcon.agent.plugins;
/*
 * 修订记录:
 * guqiu@yiji.com 2016-06-23 15:46 创建
 */



/**
 * JDBC 插件接口
 * @author guqiu@yiji.com
 */
public interface JDBCPlugin extends Plugin{

    /**
     * 数据库的JDBC连接驱动名称
     * @return
     */
    String getJDBCDriveName();

    /**
     * 数据库的连接对象集合
     * 系统将根据此对象建立数据库连接
     * @return
     */
// Path: src/main/java/com/yiji/falcon/agent/falcon/FalconReportObject.java
// @Data
// public class FalconReportObject implements Cloneable{
// 
//     /**
//      *  标明Metric的主体(属主)，比如metric是cpu_idle，那么Endpoint就表示这是哪台机器的cpu_idle
//      */
//     private String endpoint;
//     /**
//      * 最核心的字段，代表这个采集项具体度量的是什么, 比如是cpu_idle呢，还是memory_free, 还是qps
//      */
//     private String metric;
//     /**
//      * 表示汇报该数据时的unix时间戳，注意是整数，代表的是秒
//      */
//     private long timestamp;
//     /**
//      * 表示该数据采集项的汇报周期，这对于后续的配置监控策略很重要，必须明确指定。
//      */
//     private int step;
//     /**
//      * 代表该metric在当前时间点的值,数值类型
//      */
//     private String value;
//     /**
//      * 只能是COUNTER或者GAUGE二选一，前者表示该数据采集项为计时器类型，后者表示其为原值 (注意大小写)
//      GAUGE：即用户上传什么样的值，就原封不动的存储
//      COUNTER：指标在存储和展现的时候，会被计算为speed，即（当前值 - 上次值）/ 时间间隔
//      */
//     private CounterType counterType;
//     /**
//      * 一组逗号分割的键值对, 对metric进一步描述和细化, 可以是空字符串. 比如idc=lg，比如service=xbox等，多个tag之间用逗号分割
//      */
//     private String tags;
// 
//     /**
//      * 仅供系统使用
//      */
//     private ObjectName objectName;
// 
//     @Override
//     public FalconReportObject clone() {
//         try {
//             return (FalconReportObject) super.clone();
//         } catch (CloneNotSupportedException e) {
//             return new FalconReportObject();
//         }
//     }
// 
//     /**
//      * 添加tag
//      * @param newTag
//      * @return
//      */
//     public FalconReportObject appendTags(String newTag){
//         if(!StringUtils.isEmpty(newTag)){
//             if(StringUtils.isEmpty(this.getTags())){
//                 this.setTags(newTag);
//             }else{
//                 this.setTags(this.getTags() + "," + newTag);
//             }
//         }
//         return this;
//     }
// 
// }
// 
// Path: src/main/java/com/yiji/falcon/agent/vo/jdbc/JDBCConnectionInfo.java
// @Data
// public class JDBCConnectionInfo {
//     private String url;
//     private String username;
//     private String password;
// 
//     public JDBCConnectionInfo(String url, String username, String password) {
//         this.url = url;
//         this.username = username;
//         this.password = password;
//     }
// }


// Path: src/main/java/com/yiji/falcon/agent/plugins/JDBCPlugin.java
import com.yiji.falcon.agent.falcon.FalconReportObject;
import com.yiji.falcon.agent.vo.jdbc.JDBCConnectionInfo;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;

/*
 * www.yiji.com Inc.
 * Copyright (c) 2016 All Rights Reserved
 */
package com.yiji.falcon.agent.plugins;
/*
 * 修订记录:
 * guqiu@yiji.com 2016-06-23 15:46 创建
 */



/**
 * JDBC 插件接口
 * @author guqiu@yiji.com
 */
public interface JDBCPlugin extends Plugin{

    /**
     * 数据库的JDBC连接驱动名称
     * @return
     */
    String getJDBCDriveName();

    /**
     * 数据库的连接对象集合
     * 系统将根据此对象建立数据库连接
     * @return
     */
    Collection<JDBCConnectionInfo> getConnectionInfos();