1
秦芳睿
8 天以前 e70a362606b78a822e93d5117a9013e8f9086faf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package com.smtaiserver.smtaiserver.attach;
 
import com.smtaiserver.smtaiserver.database.SMTDatabase;
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecords;
import com.smtaiserver.smtaiserver.javaai.ast.ASTDBMap;
import com.smtservlet.util.Json;
import com.smtservlet.util.SMTJsonWriter;
import com.smtservlet.util.SMTStatic;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.dom4j.Document;
import org.dom4j.Element;
 
public class SMTAIAttachMetricDef 
{
    private String                            _id;
    private String                            _title;
    private String                            _group;
    private SMTAttachMetricSqlXml            _sqlxmlName;
    private SMTAttachMetricSqlXml            _sqlxmlValue;
    
    public SMTAIAttachMetricDef(DBRecord rec) throws Exception
    {
        _id = rec.getString("metric_id");
        _title = rec.getString("metric_title");
        _group = rec.getString("metric_group");
        Document doc = SMTStatic.convStrToXmlDoc("<ROOT>" + rec.getString("metric_config") + "</ROOT>");
        Element xmlNameSql = (Element) doc.selectSingleNode("ROOT/NAME_SQL");
        _sqlxmlName = new SMTAttachMetricSqlXml(xmlNameSql);
        
        Element xmValueSql = (Element) doc.selectSingleNode("ROOT/VALUE_SQL");
        _sqlxmlValue = new SMTAttachMetricSqlXml(xmValueSql);
 
    }
    
    public String getId()
    {
        return _id;
    }
    
    public String getTitle()
    {
        return _title;
    }
    
    public String getGroup()
    {
        return _group;
    }
    
    public void queryNameToJson(String name, SMTJsonWriter jsonWr) throws Exception
    {
        try(ASTDBMap dbMap = new ASTDBMap())
        {
            SMTDatabase db = dbMap.getDatabase(_sqlxmlName.getDSId());
            String sql = _sqlxmlName.createSQL(null);
//            DBRecords recs = db.querySQL("SELECT * FROM (" + sql + ") T WHERE title ILIKE ? LIMIT 5", new Object[] {"%" + name + "%"});
            DBRecords recs = db.querySQL("SELECT * FROM (" + sql + ") T WHERE title ILIKE ? ", new Object[] {"%" + name + "%"});
            for(DBRecord rec : recs.getRecords())
            {
                jsonWr.beginMap(null);
                for(Entry<String, Integer> entry : rec.getFieldMap().entrySet())
                {
                    jsonWr.addKeyValue(entry.getKey(), rec.getString(entry.getValue()));
                }
                jsonWr.endMap();
            }
        }
    }
    
    public void queryValueToJson(Date startTime, Date endTime, Json jsonQuotaKey, SMTJsonWriter jsonWr,Integer limit) throws Exception
    {
        try(ASTDBMap dbMap = new ASTDBMap())
        {
            Map<String, String> mapArgs = new HashMap<>();
            mapArgs.put("start_time", SMTStatic.toString(startTime));
            mapArgs.put("end_time", SMTStatic.toString(endTime));
            mapArgs.put("limit", SMTStatic.toString(limit));
 
            for(Entry<String, Json> entry : jsonQuotaKey.asJsonMap().entrySet())
            {
                mapArgs.put(entry.getKey(), entry.getValue().asString());
            }
            
            SMTDatabase db = dbMap.getDatabase(_sqlxmlName.getDSId());
            String sql = _sqlxmlValue.createSQL(mapArgs);
            DBRecords recs = db.querySQL(sql, null);
            
            jsonWr.beginArray("columns");
            {
                jsonWr.addKeyValue(null, "时间");
                jsonWr.addKeyValue(null, _title);
            }
            jsonWr.endArray();
            
            jsonWr.beginArray("records");
            for(DBRecord rec : recs.getRecords())
            {
                jsonWr.beginArray(null);
                {
                    jsonWr.addKeyValue(null, rec.getString("time"));
                    jsonWr.addKeyValue(null, rec.getString("value"));
                }
                jsonWr.endArray();
            }
            jsonWr.endArray();
        }
    }
}