Package com.nabalive.server.web.controller

Source Code of com.nabalive.server.web.controller.AdminController$Nab

package com.nabalive.server.web.controller;

import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.nabalive.data.core.dao.NabaztagDAO;
import com.nabalive.data.core.dao.UserDAO;
import com.nabalive.data.core.model.Nabaztag;
import com.nabalive.data.core.model.User;
import com.nabalive.framework.web.Request;
import com.nabalive.framework.web.Response;
import com.nabalive.framework.web.Route;
import com.nabalive.framework.web.SimpleRestHandler;
import com.nabalive.framework.web.exception.HttpException;
import com.nabalive.server.jabber.ConnectionManager;
import com.nabalive.server.jabber.Status;
import com.nabalive.server.web.Token;
import com.nabalive.server.web.TokenUtil;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import static com.google.common.base.Preconditions.checkNotNull;

/**
* Created by IntelliJ IDEA.
* User: Julien Cheype
* Date: 12/15/11
*/

@Component
public class AdminController {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private SimpleRestHandler restHandler;

    @Autowired
    private ConnectionManager connectionManager;

    @Autowired
    private NabaztagDAO nabaztagDAO;


    @Autowired
    private UserDAO userDAO;

    private Supplier<Long> awakeSupplier = Suppliers.memoizeWithExpiration(new AwakeSupplier(), 5, TimeUnit.SECONDS);
    private Supplier<List<Nab>> detailSupplier = Suppliers.memoizeWithExpiration(new DetailSupplier(), 1, TimeUnit.MINUTES);

    @PostConstruct
    void init() {
        restHandler
                .get(new Route("/admin/connected/infos") {
                    @Override
                    public void handle(Request request, Response response, Map<String, String> map) throws Exception {
                        long nabaztagRegistered = nabaztagDAO.count();
                        long users = userDAO.count();
                        Infos infos = new Infos(connectionManager.size(), awakeSupplier.get(), nabaztagRegistered, users);
                        response.writeJSON(infos);
                    }
                })
                .get(new Route("/admin/connected/infos/details") {
                    @Override
                    public void handle(Request request, Response response, Map<String, String> map) throws Exception {
                        response.writeJSON(detailSupplier.get());
                    }
                })
                .get(new Route("/admin/connected/list") {
                    @Override
                    public void handle(Request request, Response response, Map<String, String> map) throws Exception {
                        Token token = TokenUtil.decode(checkNotNull(request.getParamOrHeader("token")), Token.class);
                        User user = checkNotNull(userDAO.get(token.getUserId()));
                        if (!user.getPermissions().contains("admin"))
                            throw new HttpException(HttpResponseStatus.UNAUTHORIZED, "UNAUTHORIZED access");

                        response.writeJSON(connectionManager.keySet());
                    }
                });
    }
   
    class Infos{
        public final long connected;
        public final long awake;
        public final long registered;
        public final long users;

        Infos(long connected, long awake, long registered, long users) {
            this.connected = connected;
            this.awake = awake;
            this.registered = registered;
            this.users = users;
        }
    }


    private class AwakeSupplier implements Supplier<Long>{
        @Override
        public Long get() {
            long counter = 0;
            for(Status status: connectionManager.values()){
                if(!status.isAsleep()) counter++;
            }
            return counter;
        }
    }

    private class Nab{
        public final String name;
        public final String macFiltered;
        public final String ipFiltered;
        public final boolean aSleep;

        private Nab(String name, String macFiltered, String ipFiltered, boolean aSleep) {
            this.name = name;
            this.macFiltered = macFiltered;
            this.ipFiltered = ipFiltered;
            this.aSleep = aSleep;
        }
    }

    private class DetailSupplier implements Supplier<List<Nab>>{
        @Override
        public List<Nab> get() {
            List<Nab> nabList = new ArrayList<Nab>();
            for(Status status: connectionManager.values()){
                InetSocketAddress remoteAddress = (InetSocketAddress) status.getContext().getChannel().getRemoteAddress();
                String ip = remoteAddress.getAddress().getHostAddress();
                String ipFiltered = ip.replaceAll("\\.\\d+$", ".1");
                String macFiltered = "";
                if(status.getUsername() != null)
                    macFiltered = "000000"+status.getUsername().substring(6);
                nabList.add(new Nab(macFiltered, macFiltered, ipFiltered, status.isAsleep()));
            }
            return nabList;
        }
    }
}
TOP

Related Classes of com.nabalive.server.web.controller.AdminController$Nab

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.
.js','ga'); ga('create', 'UA-20639858-1', 'auto'); ga('send', 'pageview');