All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scouter.agent.counter.meter.MeterUsers Maven / Gradle / Ivy

/*
 *  Copyright 2015 the original author or authors. 
 *  @https://github.com/scouter-project/scouter
 *
 *  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 scouter.agent.counter.meter;

import java.util.Enumeration;
import scouter.agent.Configure;
import scouter.agent.Logger;
import scouter.util.LongLongLinkedMap;
import scouter.util.LongLongLinkedMap.LongLongLinkedEntry;

public class MeterUsers {

	private static final int MAX_USERS = 70000;
	protected static LongLongLinkedMap users = new LongLongLinkedMap().setMax(MAX_USERS);
	protected static MeterResource firstVisitors = new MeterResource();

	public static void add(long userid) {
		if (userid == 0)
			firstVisitors.add(1);
		else {
			users.putLast(userid, System.currentTimeMillis());
		}
	}
   
	public synchronized static int getUsers() {
		long max_think_time=Configure.getInstance().counter_recentuser_valid_ms;
		int v = 0;
		long now = System.currentTimeMillis();
		try {
			Enumeration en = users.entries();
			while (en.hasMoreElements()) {
				LongLongLinkedEntry e = en.nextElement();
				if (now - e.getValue() >max_think_time) {
				   users.remove(e.getKey());
				} else {
					v++;
				}
			}
		} catch (Throwable t) {
			Logger.println("A114", "METER-USERS" + t.toString());
		}
		return v;
	}

	public synchronized static int getNewUsers() {
		return (int) firstVisitors.getSum(300);
	}

	public static void main(String[] args) throws InterruptedException {
		for (int i = 1; i <= 100; i++) {
			if(i==50)
				Thread.sleep(1000);
			add(i);
		}
		Thread.sleep(1000);
		System.out.println(getUsers());
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy