/*
* Copyright 2016 KairosDB Authors
*
* Licensed 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.kairosdb.core.datastore;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;
import org.kairosdb.core.aggregator.Aggregator;
import org.kairosdb.core.groupby.GroupBy;
import org.kairosdb.util.Preconditions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static com.google.common.base.Preconditions.checkNotNull;
public class QueryMetric implements DatastoreMetricQuery
{
private long startTime;
private long endTime;
private boolean endTimeSet;
private int cacheTime;
private String name;
private SetMultimap<String, String> tags = HashMultimap.create();
private List<GroupBy> groupBys = new ArrayList<GroupBy>();
private List<Aggregator> aggregators;
private String cacheString;
private boolean excludeTags = false;
private int limit;
private Order order = Order.ASC;
private List<QueryPlugin> plugins;
public QueryMetric(long start_time, int cacheTime, String name)
{
this.aggregators = new ArrayList<Aggregator>();
this.plugins = new ArrayList<QueryPlugin>();
this.startTime = start_time;
this.cacheTime = cacheTime;
this.name = Preconditions.checkNotNullOrEmpty(name);
}
public QueryMetric(long start_time, long end_time, int cacheTime, String name)
{
this.aggregators = new ArrayList<Aggregator>();
this.plugins = new ArrayList<QueryPlugin>();
this.startTime = start_time;
this.endTime = end_time;
this.endTimeSet = true;
this.cacheTime = cacheTime;
this.name = Preconditions.checkNotNullOrEmpty(name);
}
public QueryMetric addAggregator(Aggregator aggregator)
{
checkNotNull(aggregator);
this.aggregators.add(aggregator);
return (this);
}
public QueryMetric setTags(SetMultimap<String, String> tags)
{
this.tags = tags;
return this;
}
public QueryMetric setTags(Map<String, String> tags)
{
this.tags.clear();
for (String s : tags.keySet())
{
this.tags.put(s, tags.get(s));
}
return this;
}
public QueryMetric addTag(String name, String value)
{
this.tags.put(name, value);
return this;
}
@Override
public String getName()
{
return name;
}
public List<Aggregator> getAggregators()
{
return aggregators;
}
@Override
public SetMultimap<String, String> getTags()
{
return (tags);
}
@Override
public long getStartTime()
{
return startTime;
}
@Override
public long getEndTime()
{
if (!endTimeSet)
endTime = Long.MAX_VALUE;
return endTime;
}
public int getCacheTime()
{
return cacheTime;
}
public void setEndTime(long endTime)
{
this.endTime = endTime;
this.endTimeSet = true;
}
public void setStartTime(long startTime)
{
this.startTime = startTime;
}
public List<GroupBy> getGroupBys()
{
return Collections.unmodifiableList(groupBys);
}
public void addGroupBy(GroupBy groupBy)
{
this.groupBys.add(groupBy);
}
public void setCacheString(String cacheString)
{
this.cacheString = cacheString;
}
public String getCacheString()
{
return (cacheString);
}
public boolean isExcludeTags()
{
return excludeTags;
}
public void setExcludeTags(boolean excludeTags)
{
this.excludeTags = excludeTags;
}
public void setLimit(int limit)
{
this.limit = limit;
}
public int getLimit()
{
return (limit);
}
public void setOrder(Order order)
{
this.order = order;
}
public Order getOrder()
{
return (order);
}
@Override
public List<QueryPlugin> getPlugins()
{
return Collections.unmodifiableList(plugins);
}
public QueryMetric addPlugin(QueryPlugin plugin)
{
this.plugins.add(plugin);
return this;
}
}