/* * Copyright 2015 Eediom Inc. All rights reserved. */ package org.araqne.logdb.metadata; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import org.apache.felix.ipojo.annotations.Component; import org.apache.felix.ipojo.annotations.Invalidate; import org.apache.felix.ipojo.annotations.Requires; import org.apache.felix.ipojo.annotations.Validate; import org.araqne.logdb.FieldOrdering; import org.araqne.logdb.MetadataCallback; import org.araqne.logdb.MetadataProvider; import org.araqne.logdb.MetadataService; import org.araqne.logdb.QueryContext; import org.araqne.logdb.Row; import org.araqne.storage.api.RCDirectBufferManager; @Component(name = "logdb-memory-metadata") public class MemoryMetadataProvider implements MetadataProvider, FieldOrdering { @Requires private MetadataService metadataService; @Requires private RCDirectBufferManager manager; private List<String> fields; public MemoryMetadataProvider() { this.fields = Arrays.asList("type", "free", "total"); } @Override public String getType() { return "memory"; } @Validate public void start() { metadataService.addProvider(this); } @Invalidate public void stop() { if (metadataService != null) metadataService.removeProvider(this); } @Override public void verify(QueryContext context, String queryString) { } @Override public void query(QueryContext context, String queryString, MetadataCallback callback) { StringTokenizer tokenizer = new StringTokenizer(queryString, " "); if (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); if (token.equals("pools")) { Map<String, Object> ret = null; for (String poolName : manager.getPoolNames()) { ret = new HashMap<String, Object>(); ret.put("available", manager.getAvailablePoolSize(poolName)); ret.put("using", manager.getUsingPoolSize(poolName)); ret.put("name", poolName); ret.put("type", "offheap"); callback.onPush(new Row(ret)); } } else if (token.equals("objects")) { Map<String, Object> ret = null; for (String usageName : manager.getUsagesNames()) { ret = new HashMap<String, Object>(); ret.put("using", manager.getUsingObjectSize(usageName)); ret.put("name", usageName); ret.put("type", "offheap"); callback.onPush(new Row(ret)); } } } else { Map<String, Object> heap = new HashMap<String, Object>(); Runtime runtime = Runtime.getRuntime(); heap.put("type", "heap"); heap.put("free", runtime.freeMemory()); heap.put("total", runtime.totalMemory()); callback.onPush(new Row(heap)); Map<String, Object> rc = new HashMap<String, Object>(); rc.put("type", "offheap"); rc.put("total", manager.getTotalCapacity()); rc.put("object_count", manager.getObjectCount()); callback.onPush(new Row(rc)); } } @Override public List<String> getFieldOrder() { return fields; } }