Package com.trendmicro.mist.session

Source Code of com.trendmicro.mist.session.SessionPool

package com.trendmicro.mist.session;

import java.io.StringWriter;
import java.util.Collection;
import java.util.Map.Entry;
import java.util.TreeMap;

import org.nocrala.tools.texttablefmt.CellStyle;
import org.nocrala.tools.texttablefmt.CellStyle.HorizontalAlign;
import org.nocrala.tools.texttablefmt.Table;

import com.trendmicro.mist.Client;
import com.trendmicro.mist.Connection;
import com.trendmicro.mist.Daemon;
import com.trendmicro.mist.MistException;
import com.trendmicro.mist.proto.GateTalk;

public class SessionPool {
    public static TreeMap<Integer, Session> pool = new TreeMap<Integer, Session>();

    /**
     * Get a session from the session pool by session id. If the session's role
     * is not specified yet, then create the concrete session according to the
     * role. It is thread-safe.
     *
     * @param sessId
     *            The session id
     * @param role
     *            The request role, GateTalk.Request.Role.SINK or
     *            GateTalk.Request.Role.SOURCE<br>
     *            If role is null, then if the session has not been initialized,
     *            it will return null
     * @return The ConsumerSession / ProducerSession in the session pool
     * @throws MistException
     *             If the session id is not valid, throw a MistException
     */
    public synchronized static Session getOrCreateConcreteSession(int sessId, GateTalk.Request.Role role) throws MistException {
        if(!pool.containsKey(sessId))
            throw new MistException("invalid session id " + sessId);
        Session sess = SessionPool.pool.get(sessId);
        if(sess == null && role != null) {
            if(role == GateTalk.Request.Role.SOURCE)
                sess = new ConsumerSession(sessId, null);
            else if(role == GateTalk.Request.Role.SINK)
                sess = new ProducerSession(sessId, null);
            SessionPool.pool.put(sessId, sess);
        }
        return sess;
    }

    public static String getSessionListString() {
        StringWriter strOut = new StringWriter();

        strOut.write(String.format("%d sessions%n", pool.size()));
        if(pool.size() > 0) {
            Table tab = new Table(5);
            tab.addCell("ID");
            tab.addCell("Status");
            tab.addCell("Type");
            tab.addCell("Exchange");
            tab.addCell("Conn. IDs");

            try {
                for(Entry<Integer, Session> ent : pool.entrySet()) {
                    if(ent.getValue() == null) {
                        tab.addCell(ent.getKey().toString());
                        tab.addCell("idle");
                        tab.addCell("");
                        tab.addCell("");
                        tab.addCell("");
                    }
                    else {
                        Collection<Client> clients = ent.getValue().getClientList();
                        Session sess = ent.getValue();
                        tab.addCell(ent.getKey().toString());
                        tab.addCell(sess.isAttached() ? "BUSY": "idle");
                        if(sess instanceof ProducerSession)
                            tab.addCell("producer");
                        else
                            tab.addCell("consumer");
                        String exchanges = "";
                        String conn_ids = "";

                        if(ent.getValue().isAttached())
                            for(Client c : clients)
                                conn_ids += (c.getConnection().getId() + " ");
                        for(Client c : clients)
                            exchanges += (c.getExchange().toString() + " ");
                        tab.addCell(exchanges);
                        tab.addCell(conn_ids);
                    }
                }
            }
            catch(Exception e) {
            }
            strOut.write(tab.render() + "\n");
        }

        strOut.write(String.format("%d connections%n", Daemon.connectionPool.size()));
        if(Daemon.connectionPool.size() > 0) {
            Table tab = new Table(6);
            tab.addCell("ID");
            tab.addCell("Connected");
            tab.addCell("Type");
            tab.addCell("Auth");
            tab.addCell("Host");
            tab.addCell("Ref. Count");
            for(Connection conn : Daemon.connectionPool) {
                tab.addCell(String.valueOf(conn.getId()));
                tab.addCell(String.valueOf(conn.isConnected()), new CellStyle(HorizontalAlign.center));
                tab.addCell(conn.getType());
                tab.addCell(conn.getConfig().getUsername() + ":*");
                tab.addCell(conn.getConnectionString());
                tab.addCell(String.valueOf(conn.getReferenceCount()), new CellStyle(HorizontalAlign.right));
            }
            strOut.write(tab.render() + "\n");
        }

        return strOut.toString();
    }
}
TOP

Related Classes of com.trendmicro.mist.session.SessionPool

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.