/*
* Copyright 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.glance.api;
import java.net.URI;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.glance.GlanceEndPointInfo;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
/**
* Glance API client factory
*/
public class GlanceApiFactory {
private Logger _log = LoggerFactory.getLogger(GlanceApiFactory.class);
private static final int DEFAULT_MAX_CONN = 300;
private static final int DEFAULT_MAX_CONN_PER_HOST = 100;
private static final int DEFAULT_CONN_TIMEOUT = 1000 * 30;
private static final int DEFAULT_SOCKET_CONN_TIMEOUT = 1000 * 60 * 60;
private int _maxConn = DEFAULT_MAX_CONN;
private int _maxConnPerHost = DEFAULT_MAX_CONN_PER_HOST;
private int _connTimeout = DEFAULT_CONN_TIMEOUT;
private int _socketConnTimeout = DEFAULT_SOCKET_CONN_TIMEOUT;
private ConcurrentMap<String, GlanceApi> _clientMap = null;
/**
* Initialize
*/
public void init() {
_log.info(" GlanceApi factory initialized");
if (_clientMap == null) {
_clientMap = new ConcurrentHashMap<String, GlanceApi>();
_log.info(" GlanceApi factory new map created");
}
}
/**
* shutdown
*/
protected void shutdown() {
}
/**
* Return Glance API client, create if not present
*
* @param provider Storage Provider URI
* @return
*/
public GlanceApi getApi(URI provider, GlanceEndPointInfo endPoint)
{
boolean isNew = false;
GlanceApi glanceApi = _clientMap.get(provider.toString());
if (glanceApi == null) {
isNew = true;
ClientConfig config = new DefaultClientConfig();
Client jerseyClient = Client.create(config);
glanceApi = new GlanceApi(endPoint, jerseyClient);
_clientMap.putIfAbsent(provider.toString(), glanceApi);
}
if(!isNew)
{ //Token gets expired, if the instance is not new refresh it.
glanceApi.getClient().setAuthTokenHeader(endPoint.getGlanceToken());
}
return glanceApi;
}
}