/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hadoop.chukwa.rest.services; import java.util.*; import java.text.SimpleDateFormat; import org.apache.hadoop.chukwa.hicc.ClusterConfig; import org.apache.commons.logging.*; import org.apache.hadoop.chukwa.database.DatabaseConfig; import org.apache.hadoop.chukwa.database.Macro; import org.apache.hadoop.chukwa.util.DatabaseWriter; import org.apache.hadoop.chukwa.util.DatabaseWriter; public class RestHome { private static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss"; protected static Log log = LogFactory.getLog(RestHome.class); public static String getCluster() { String cluster=System.getProperty("CLUSTER", ""); if (cluster.compareTo("")==0) { ClusterConfig cc=new ClusterConfig(); Iterator<String> keys = cc.getClusters(); if (keys.hasNext()) { cluster=keys.next(); } System.setProperty("CLUSTER",cluster); } if (cluster == null) { cluster = "demo"; } return cluster; } public static String convertLongToDateString(long date) { date=date; SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); log.error("date:"+sdf.format(date)); return sdf.format(date); } public static long convertDateLongStringToLong(String d) { Long l=Long.parseLong(d); return l; } public static String getSingleQuery(String table, String field, String timestamp) { Calendar now = Calendar.getInstance(); // default time long startTime = now.getTimeInMillis(); long endTime = now.getTimeInMillis(); if (field.compareTo("timestamp")==0) { startTime = Long.parseLong(timestamp); endTime = Long.parseLong(timestamp); } Macro mp = new Macro(startTime, endTime, table, null); String query = mp.toString(); StringBuilder queryBuilder = new StringBuilder(); queryBuilder.append("select * from "); queryBuilder.append(query); if (field.compareTo("timestamp")==0) { queryBuilder.append(" where "+field+" = \""+convertLongToDateString(Long.parseLong(timestamp))+"\""); } else { queryBuilder.append(" where "+field+" = \""+timestamp+"\""); } query = queryBuilder.toString(); log.error("query:"+query); return query.toString(); } public static String getTimeBetweenQuery(String table, String starttime, String endtime) { long startTime = convertDateLongStringToLong(starttime)*1000; long endTime = convertDateLongStringToLong(endtime)*1000; StringBuilder queryBuilder = new StringBuilder(); queryBuilder.append("select * from "); queryBuilder.append(table); queryBuilder.append(" where timestamp between \"[start]\" and \"[end]\""); String query = queryBuilder.toString(); Macro mp = new Macro(startTime, endTime, query, null); query = mp.toString(); log.error("query:"+query); return query; } public static String getCriteriaQuery(String table, Map<String, String> criteria) { Calendar now = Calendar.getInstance(); // default time long startTime = now.getTimeInMillis()-(7*24*60*60*1000); long endTime = now.getTimeInMillis(); Macro mp = new Macro(startTime, endTime, table, null); String query = mp.toString(); StringBuilder queryBuilder = new StringBuilder(); queryBuilder.append("select * from "); queryBuilder.append(query); queryBuilder.append(" where "); int count=0; for (Map.Entry<String, String> e : criteria.entrySet()) { if (count != 0) { queryBuilder.append(" and "); } queryBuilder.append(e.getKey()+"=\""+e.getValue()+"\""); count++; } query = queryBuilder.toString(); log.error("query:"+query); return query; } }