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

com.librato.metrics.DummyApp Maven / Gradle / Ivy

package com.librato.metrics;

import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.*;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.*;


/**
 * copied from the ExampleRunner in metrics-core
 */
public class DummyApp {

    public static class DirectoryLister {
        private final MetricsRegistry registry = Metrics.defaultRegistry();
        private final Counter counter = registry.newCounter(getClass(), "directories");
        private final Meter meter = registry.newMeter(getClass(), "files", "files", TimeUnit.SECONDS);
        private final Timer timer = registry.newTimer(getClass(),
                "directory-listing",
                TimeUnit.MILLISECONDS,
                TimeUnit.SECONDS);
        private final File directory;

        public DirectoryLister(File directory) {
            this.directory = directory;
        }

        public List list() throws Exception {
            counter.inc();
            final File[] list = timer.time(new Callable() {
                @Override
                public File[] call() throws Exception {
                    return directory.listFiles();
                }
            });
            counter.dec();

            if (list == null) {
                return Collections.emptyList();
            }

            final List result = new ArrayList(list.length);
            for (File file : list) {
                meter.mark();
                result.add(file);
            }
            return result;
        }
    }


    private static final int WORKER_COUNT = 10;
    private static final BlockingQueue JOBS = new LinkedBlockingQueue();
    private static final ExecutorService POOL = Executors.newFixedThreadPool(WORKER_COUNT);
    private static final MetricsRegistry REGISTRY = Metrics.defaultRegistry();
    private static final Counter QUEUE_DEPTH = REGISTRY.newCounter(DummyApp.class, "queue-depth");
    private static final Histogram DIRECTORY_SIZE = REGISTRY.newHistogram(DummyApp.class, "directory-size", false);

    public static class Job implements Runnable {
        @Override
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    final File file = JOBS.poll(1, TimeUnit.MINUTES);
                    QUEUE_DEPTH.dec();
                    if (file.isDirectory()) {
                        final List contents = new DirectoryLister(file).list();
                        DIRECTORY_SIZE.update(contents.size());
                        QUEUE_DEPTH.inc(contents.size());
                        JOBS.addAll(contents);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    public static void main(String[] args) throws Exception {
        LibratoReporter.enable(LibratoReporter.builder("", "", "testing").setReportVmMetrics(false), 10, TimeUnit.SECONDS);

        System.err.println("Scanning all files on your hard drive...");

        JOBS.add(new File("/"));
        QUEUE_DEPTH.inc();
        for (int i = 0; i < WORKER_COUNT; i++) {
            POOL.submit(new Job());
        }

        POOL.awaitTermination(30, TimeUnit.DAYS);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy