Package com.netflix.staash.service

Source Code of com.netflix.staash.service.PaasDataService

/*******************************************************************************
* /*
*  *
*  *  Copyright 2013 Netflix, Inc.
*  *
*  *     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 com.netflix.staash.service;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.concurrent.Executors;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.inject.Inject;
import com.netflix.staash.connection.ConnectionFactory;
import com.netflix.staash.connection.PaasConnection;
import com.netflix.staash.json.JsonArray;
import com.netflix.staash.json.JsonObject;
import com.netflix.staash.rest.meta.entity.EntityType;

public class PaasDataService implements DataService{
    private MetaService meta;
    private ConnectionFactory fac;
    ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
    @Inject
    public PaasDataService(MetaService meta, ConnectionFactory fac){
        this.meta = meta;
        this.fac = fac;
    }

    public String writeRow(String db, String table, JsonObject rowObj) {
        JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        PaasConnection conn = fac.createConnection(storageConf, db);
        return conn.insert(db,table,rowObj);
    }
    public String writeToKVStore(String db, String table, JsonObject rowObj) {
      JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        PaasConnection conn = fac.createConnection(storageConf, db);
        rowObj.putString("type", "kv");
    return conn.insert(db, table, rowObj);
    }

    public String listRow(String db, String table, String keycol, String key) {
        JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        if (storageConf == null) return "{\"msg\":\"the requested table does not exist in paas\"}";
        PaasConnection conn = fac.createConnection(storageConf,db);
        return conn.read(db,table,keycol,key);
    }
    public String writeEvents(String db, String table, JsonArray events) {     
        for (Object event: events) {
          JsonObject obj = (JsonObject) event;
          writeEvent(db, table, obj);
        }
    return "{\"msg\":\"ok\"}";
    }

    public String writeEvent(String db, String table, JsonObject rowObj) {
        JsonObject tbl = meta.runQuery(EntityType.SERIES, db+"."+table);
        if (tbl == null) throw new RuntimeException("Table "+table+" does not exist");
        JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        if (storageConf == null) throw new RuntimeException("Storage for  "+table+" does not exist");
        PaasConnection conn = fac.createConnection(storageConf,db);
        String periodicity = tbl.getString("periodicity");
        Long time = rowObj.getLong("timestamp");
        if (time == null || time <= 0) {
          time = System.currentTimeMillis();
        }
        String prefix = rowObj.getString("prefix");
        if (prefix !=  null && !prefix.equals("")) prefix = prefix+":"; else prefix = "";
        Long rowkey = (time/Long.parseLong(periodicity))*Long.parseLong(periodicity);
        rowObj.putString("columns", "key,column1,value");
        rowObj.putString("values","'"+prefix+String.valueOf(rowkey)+"',"+time+",'"+rowObj.getString("event")+"'");
        return conn.insert(db,table,rowObj);
    }

    public String readEvent(String db, String table, String eventTime) {
        JsonObject tbl = meta.runQuery(EntityType.SERIES, db+"."+table);
        if (tbl == null) throw new RuntimeException("Table "+table+" does not exist");
        JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        if (storageConf == null) throw new RuntimeException("Storage for  "+table+" does not exist");
        PaasConnection conn = fac.createConnection(storageConf,db);
        String periodicity = tbl.getString("periodicity");
        Long time = Long.parseLong(eventTime);
        Long rowkey = (time/Long.parseLong(periodicity))*Long.parseLong(periodicity);
        return conn.read(db,table,"key",String.valueOf(rowkey),"column1",String.valueOf(eventTime));
    }
   
    public String readEvent(String db, String table, String prefix,String eventTime) {
        JsonObject tbl = meta.runQuery(EntityType.SERIES, db+"."+table);
        if (tbl == null) throw new RuntimeException("Table "+table+" does not exist");
        JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        if (storageConf == null) throw new RuntimeException("Storage for  "+table+" does not exist");
        PaasConnection conn = fac.createConnection(storageConf,db);
        String periodicity = tbl.getString("periodicity");
        Long time = Long.parseLong(eventTime);
        Long rowkey = (time/Long.parseLong(periodicity))*Long.parseLong(periodicity);
        if (prefix !=  null && !prefix.equals("")) prefix = prefix+":"; else prefix = "";
        return conn.read(db,table,"key",prefix+String.valueOf(rowkey),"column1",String.valueOf(eventTime));
    }

    public String readEvent(String db, String table, String prefix,String startTime, String endTime) {
        JsonObject tbl = meta.runQuery(EntityType.SERIES, db+"."+table);
        if (tbl == null) throw new RuntimeException("Table "+table+" does not exist");
        JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        if (storageConf == null) throw new RuntimeException("Storage for  "+table+" does not exist");
        PaasConnection conn = fac.createConnection(storageConf,db);
        String periodicity = tbl.getString("periodicity");
        Long time = Long.parseLong(startTime);
        Long startTimekey = (time/Long.parseLong(periodicity))*Long.parseLong(periodicity);
        Long endTimeL = Long.parseLong(endTime);
        Long endTimeKey = (endTimeL/Long.parseLong(periodicity))*Long.parseLong(periodicity);
        if (prefix !=  null && !prefix.equals("")) prefix = prefix+":"; else prefix = "";
        JsonObject response = new JsonObject();
        for (Long current = startTimekey; current < endTimeKey;current = current+Long.parseLong(periodicity) ) {
            JsonObject  slice = new JsonObject(conn.read(db,table,"key",prefix+String.valueOf(current)));
          for (String field:slice.getFieldNames()) {
            response.putString(field, slice.getString(field));
          }
        }
        return response.toString();
    }
    public String doJoin(String db, String table1, String table2,
            String joincol, String value) {
        String res1 = listRow(db,table1,joincol,value);
        String res2 = listRow(db,table2,joincol,value);
        return "{\""+table1+"\":"+res1+",\""+table2+"\":"+res2+"}";
    }

  public byte[] fetchValueForKey(String db, String table, String keycol,
      String key) {
    JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        if (storageConf == null) return "{\"msg\":\"the requested table does not exist in paas\"}".getBytes();
        PaasConnection conn = fac.createConnection(storageConf,db);
        String ret = conn.read(db,table,keycol,key);
        JsonObject keyval = new JsonObject(ret).getObject("1");
        String val = keyval.getString("value");
        return val.getBytes();
  }

  public byte[] readChunked(String db, String table, String objectName) {
    JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        if (storageConf == null) return "{\"msg\":\"the requested table does not exist in paas\"}".getBytes();
        PaasConnection conn = fac.createConnection(storageConf,db);
        ByteArrayOutputStream os =  conn.readChunked(db, table, objectName);
        return os.toByteArray();
 

  public String writeChunked(String db, String table, String objectName,
      InputStream is) {
    // TODO Auto-generated method stub
    JsonObject storageConf = meta.getStorageForTable(db+"."+table);
        if (storageConf == null) return "{\"msg\":\"the requested table does not exist in paas\"}";
        PaasConnection conn = fac.createConnection(storageConf,db);
        return conn.writeChunked(db, table, objectName, is);
  }

  
}
TOP

Related Classes of com.netflix.staash.service.PaasDataService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.