/* * Licensed to Crate under one or more contributor license agreements. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. Crate licenses this file * to you 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. * * However, if you have executed another commercial license agreement * with Crate these terms will supersede the license and you may use the * software solely pursuant to the terms of the relevant commercial * agreement. */ package io.crate.operation.reference.sys.node; import com.google.common.collect.ImmutableMap; import io.crate.metadata.ColumnIdent; import io.crate.metadata.RowCollectExpression; import io.crate.metadata.RowContextCollectorExpression; import io.crate.metadata.expressions.RowCollectExpressionFactory; import io.crate.metadata.sys.SysNodesTableInfo; import io.crate.monitor.ExtendedFsStats; import io.crate.monitor.ThreadPools; import io.crate.operation.reference.sys.node.fs.*; import org.apache.lucene.util.BytesRef; import java.util.Map; public class SysNodesExpressionFactories { private SysNodesExpressionFactories() { } private final static Map<ColumnIdent, RowCollectExpressionFactory<NodeStatsContext>> EXPRESSION_FACTORIES_BY_COLUMN = ImmutableMap.<ColumnIdent, RowCollectExpressionFactory<NodeStatsContext>>builder() .put(SysNodesTableInfo.Columns.ID, () -> new RowContextCollectorExpression<NodeStatsContext, BytesRef>() { @Override public BytesRef value() { return row.id(); } }) .put(SysNodesTableInfo.Columns.NAME, () -> new RowContextCollectorExpression<NodeStatsContext, BytesRef>() { @Override public BytesRef value() { return row.name(); } }) .put(SysNodesTableInfo.Columns.HOSTNAME, () -> new SimpleNodeStatsExpression<BytesRef>() { @Override public BytesRef innerValue() { return row.hostname(); } }) .put(SysNodesTableInfo.Columns.REST_URL, () -> new SimpleNodeStatsExpression<BytesRef>() { @Override public BytesRef innerValue() { return row.restUrl(); } }) .put(SysNodesTableInfo.Columns.PORT, NodePortStatsExpression::new) .put(SysNodesTableInfo.Columns.LOAD, NodeLoadStatsExpression::new) .put(SysNodesTableInfo.Columns.MEM, NodeMemoryStatsExpression::new) .put(SysNodesTableInfo.Columns.HEAP, NodeHeapStatsExpression::new) .put(SysNodesTableInfo.Columns.VERSION, NodeVersionStatsExpression::new) .put(SysNodesTableInfo.Columns.THREAD_POOLS, NodeThreadPoolsExpression::new) .put(SysNodesTableInfo.Columns.THREAD_POOLS_NAME, () -> new NodeStatsThreadPoolExpression<String>() { @Override protected String valueForItem(Map.Entry<String, ThreadPools.ThreadPoolExecutorContext> input) { return input.getKey(); } }) .put(SysNodesTableInfo.Columns.THREAD_POOLS_ACTIVE, () -> new NodeStatsThreadPoolExpression<Integer>() { @Override protected Integer valueForItem(Map.Entry<String, ThreadPools.ThreadPoolExecutorContext> input) { return input.getValue().activeCount(); } }) .put(SysNodesTableInfo.Columns.THREAD_POOLS_REJECTED, () -> new NodeStatsThreadPoolExpression<Long>() { @Override protected Long valueForItem(Map.Entry<String, ThreadPools.ThreadPoolExecutorContext> input) { return input.getValue().rejectedCount(); } }) .put(SysNodesTableInfo.Columns.THREAD_POOLS_LARGEST, () -> new NodeStatsThreadPoolExpression<Integer>() { @Override protected Integer valueForItem(Map.Entry<String, ThreadPools.ThreadPoolExecutorContext> input) { return input.getValue().largestPoolSize(); } }) .put(SysNodesTableInfo.Columns.THREAD_POOLS_COMPLETED, () -> new NodeStatsThreadPoolExpression<Long>() { @Override protected Long valueForItem(Map.Entry<String, ThreadPools.ThreadPoolExecutorContext> input) { return input.getValue().completedTaskCount(); } }) .put(SysNodesTableInfo.Columns.THREAD_POOLS_THREADS, () -> new NodeStatsThreadPoolExpression<Integer>() { @Override protected Integer valueForItem(Map.Entry<String, ThreadPools.ThreadPoolExecutorContext> input) { return input.getValue().poolSize(); } }) .put(SysNodesTableInfo.Columns.THREAD_POOLS_QUEUE, () -> new NodeStatsThreadPoolExpression<Integer>() { @Override protected Integer valueForItem(Map.Entry<String, ThreadPools.ThreadPoolExecutorContext> input) { return input.getValue().queueSize(); } }) .put(SysNodesTableInfo.Columns.NETWORK, NodeNetworkStatsExpression::new) .put(SysNodesTableInfo.Columns.OS, NodeOsStatsExpression::new) .put(SysNodesTableInfo.Columns.OS_INFO, NodeOsInfoStatsExpression::new) .put(SysNodesTableInfo.Columns.PROCESS, NodeProcessStatsExpression::new) .put(SysNodesTableInfo.Columns.FS, NodeFsStatsExpression::new) .put(SysNodesTableInfo.Columns.FS_TOTAL, NodeFsTotalStatsExpression::new) .put(SysNodesTableInfo.Columns.FS_TOTAL_SIZE, new RowCollectExpressionFactory<NodeStatsContext>() { @Override public RowCollectExpression<NodeStatsContext, ?> create() { return new SimpleNodeStatsExpression<Long>() { @Override public Long innerValue() { return this.row.extendedFsStats().total().total(); } }; } }) .put(SysNodesTableInfo.Columns.FS_TOTAL_USED, new RowCollectExpressionFactory<NodeStatsContext>() { @Override public RowCollectExpression<NodeStatsContext, ?> create() { return new SimpleNodeStatsExpression<Long>() { @Override public Long innerValue() { return this.row.extendedFsStats().total().used(); } }; } }) .put(SysNodesTableInfo.Columns.FS_TOTAL_AVAILABLE, new RowCollectExpressionFactory<NodeStatsContext>() { @Override public RowCollectExpression<NodeStatsContext, ?> create() { return new SimpleNodeStatsExpression<Long>() { @Override public Long innerValue() { return this.row.extendedFsStats().total().available(); } }; } }) .put(SysNodesTableInfo.Columns.FS_TOTAL_READS, new RowCollectExpressionFactory<NodeStatsContext>() { @Override public RowCollectExpression<NodeStatsContext, ?> create() { return new SimpleNodeStatsExpression<Long>() { @Override public Long innerValue() { return this.row.extendedFsStats().total().diskReads(); } }; } }) .put(SysNodesTableInfo.Columns.FS_TOTAL_BYTES_READ, new RowCollectExpressionFactory<NodeStatsContext>() { @Override public RowCollectExpression<NodeStatsContext, ?> create() { return new SimpleNodeStatsExpression<Long>() { @Override public Long innerValue() { return this.row.extendedFsStats().total().diskReadSizeInBytes(); } }; } }) .put(SysNodesTableInfo.Columns.FS_TOTAL_WRITES, new RowCollectExpressionFactory<NodeStatsContext>() { @Override public RowCollectExpression<NodeStatsContext, ?> create() { return new SimpleNodeStatsExpression<Long>() { @Override public Long innerValue() { return this.row.extendedFsStats().total().diskWrites(); } }; } }) .put(SysNodesTableInfo.Columns.FS_TOTAL_BYTES_WRITTEN, new RowCollectExpressionFactory<NodeStatsContext>() { @Override public RowCollectExpression<NodeStatsContext, ?> create() { return new SimpleNodeStatsExpression<Long>() { @Override public Long innerValue() { return this.row.extendedFsStats().total().diskWriteSizeInBytes(); } }; } }) .put(SysNodesTableInfo.Columns.FS_DISKS, NodeStatsFsDisksExpression::new) .put(SysNodesTableInfo.Columns.FS_DISKS_DEV, () -> new NodeStatsFsArrayExpression<BytesRef>() { @Override protected BytesRef valueForItem(ExtendedFsStats.Info input) { return input.dev(); } }) .put(SysNodesTableInfo.Columns.FS_DISKS_SIZE, () -> new NodeStatsFsArrayExpression<Long>() { @Override protected Long valueForItem(ExtendedFsStats.Info input) { return input.total(); } }) .put(SysNodesTableInfo.Columns.FS_DISKS_USED, () -> new NodeStatsFsArrayExpression<Long>() { @Override protected Long valueForItem(ExtendedFsStats.Info input) { return input.used(); } }) .put(SysNodesTableInfo.Columns.FS_DISKS_AVAILABLE, () -> new NodeStatsFsArrayExpression<Long>() { @Override protected Long valueForItem(ExtendedFsStats.Info input) { return input.available(); } }) .put(SysNodesTableInfo.Columns.FS_DISKS_READS, () -> new NodeStatsFsArrayExpression<Long>() { @Override protected Long valueForItem(ExtendedFsStats.Info input) { return input.diskReads(); } }) .put(SysNodesTableInfo.Columns.FS_DISKS_BYTES_READ, () -> new NodeStatsFsArrayExpression<Long>() { @Override protected Long valueForItem(ExtendedFsStats.Info input) { return input.diskReadSizeInBytes(); } }) .put(SysNodesTableInfo.Columns.FS_DISKS_WRITES, () -> new NodeStatsFsArrayExpression<Long>() { @Override protected Long valueForItem(ExtendedFsStats.Info input) { return input.diskWrites(); } }) .put(SysNodesTableInfo.Columns.FS_DISKS_BYTES_WRITTEN, () -> new NodeStatsFsArrayExpression<Long>() { @Override protected Long valueForItem(ExtendedFsStats.Info input) { return input.diskWriteSizeInBytes(); } }) .put(SysNodesTableInfo.Columns.FS_DATA, NodeStatsFsDataExpression::new) .put(SysNodesTableInfo.Columns.FS_DATA_DEV, () -> new NodeStatsFsArrayExpression<BytesRef>() { @Override protected BytesRef valueForItem(ExtendedFsStats.Info input) { return input.dev(); } }) .put(SysNodesTableInfo.Columns.FS_DATA_PATH, () -> new NodeStatsFsArrayExpression<BytesRef>() { @Override protected BytesRef valueForItem(ExtendedFsStats.Info input) { return input.path(); } }) .build(); public static Map<ColumnIdent, RowCollectExpressionFactory<NodeStatsContext>> getNodeStatsContextExpressions() { return EXPRESSION_FACTORIES_BY_COLUMN; } }