//package cassandraStats;

package com.smeet.cassandra;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import org.apache.cassandra.db.CompactionManager;
import org.apache.cassandra.db.CompactionManagerMBean;
import org.apache.cassandra.service.StorageProxyMBean;
import org.apache.cassandra.service.StorageServiceMBean;

import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.net.InetSocketAddress;
import java.text.NumberFormat;
import java.util.Collections;

public class CassandraJmxHttpServerMy {

    private static final String FMT_URL = "service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi";
    private static final String SS_OBJECT_NAME = "org.apache.cassandra.service:type=StorageService";
    private static final String SP_OBJECT_NAME = "org.apache.cassandra.service:type=StorageProxy";
    
    private static final int DEFAULT_PORT = 8080;

    private int port = DEFAULT_PORT;

    private String host;

    private StorageServiceMBean _ssProxy;
    private MemoryMXBean _memProxy;
    private CompactionManagerMBean _mcmProxy;
    private StorageProxyMBean _spProxy;


    public void setHost(String host) {
        this.host = host;
    }

    public void setPort(int port) {
        this.port = port;
    }

    
    public CassandraJmxHttpServerMy(String host) throws IOException {
        this.host = host;
        JMXServiceURL jmxUrl = new JMXServiceURL(String.format(FMT_URL, host, port));
        JMXConnector jmxc = JMXConnectorFactory.connect(jmxUrl, null);
        MBeanServerConnection mbeanServerConn = jmxc.getMBeanServerConnection();

        try {
            _ssProxy = JMX.newMBeanProxy(mbeanServerConn, new ObjectName(SS_OBJECT_NAME), StorageServiceMBean.class);
            _spProxy = JMX.newMBeanProxy(mbeanServerConn, new ObjectName(SP_OBJECT_NAME), StorageProxyMBean.class);
            _mcmProxy = JMX.newMBeanProxy(mbeanServerConn, new ObjectName(CompactionManager.MBEAN_OBJECT_NAME), CompactionManagerMBean.class);
        } catch (MalformedObjectNameException e) {
            throw new RuntimeException("Cannot connect.", e);
        }

        _memProxy = ManagementFactory.newPlatformMXBeanProxy(mbeanServerConn,
                ManagementFactory.MEMORY_MXBEAN_NAME, MemoryMXBean.class);
        
                System.out.println("ReadOperations" + _spProxy.getReadOperations());  
    }

    public static void main(String[] args) throws IOException, InterruptedException {
        String host=args[0];
        CassandraJmxHttpServerMy server = new CassandraJmxHttpServerMy(host);
    }
}
