| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF 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. |
| */ |
| |
| package org.apache.ignite.internal.visor.igfs; |
| |
| import java.io.IOException; |
| import java.io.ObjectInput; |
| import java.io.ObjectOutput; |
| import org.apache.ignite.IgniteFileSystem; |
| import org.apache.ignite.igfs.IgfsMetrics; |
| import org.apache.ignite.internal.processors.igfs.IgfsEx; |
| import org.apache.ignite.internal.util.typedef.internal.S; |
| import org.apache.ignite.internal.visor.VisorDataTransferObject; |
| |
| /** |
| * Data transfer object for {@link IgfsMetrics}. |
| */ |
| public class VisorIgfsMetrics extends VisorDataTransferObject { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** Maximum amount of data that can be stored on local node. */ |
| private long totalSpaceSz; |
| |
| /** Local used space in bytes on local node. */ |
| private long usedSpaceSz; |
| |
| /** Number of directories created in file system. */ |
| private int foldersCnt; |
| |
| /** Number of files stored in file system. */ |
| private int filesCnt; |
| |
| /** Number of files that are currently opened for reading on local node. */ |
| private int filesOpenedForRd; |
| |
| /** Number of files that are currently opened for writing on local node. */ |
| private int filesOpenedForWrt; |
| |
| /** Total blocks read, local and remote. */ |
| private long blocksRd; |
| |
| /** Total remote blocks read. */ |
| private long blocksRdRmt; |
| |
| /** Total blocks write, local and remote. */ |
| private long blocksWrt; |
| |
| /** Total remote blocks write. */ |
| private long blocksWrtRmt; |
| |
| /** Total bytes read. */ |
| private long bytesRd; |
| |
| /** Total bytes read time. */ |
| private long bytesRdTm; |
| |
| /** Total bytes write. */ |
| private long bytesWrt; |
| |
| /** Total bytes write time. */ |
| private long bytesWrtTm; |
| |
| /** |
| * Create data transfer object for given IGFS metrics. |
| */ |
| public VisorIgfsMetrics() { |
| // No-op. |
| } |
| |
| /** |
| * Create data transfer object for given IGFS metrics. |
| * |
| * @param igfs Source IGFS. |
| */ |
| public VisorIgfsMetrics(IgniteFileSystem igfs) { |
| assert igfs != null; |
| |
| IgfsMetrics m = igfs.metrics(); |
| |
| totalSpaceSz = ((IgfsEx)igfs).context().data().maxSpaceSize(); |
| usedSpaceSz = m.localSpaceSize(); |
| foldersCnt = m.directoriesCount(); |
| filesCnt = m.filesCount(); |
| filesOpenedForRd = m.filesOpenedForRead(); |
| filesOpenedForWrt = m.filesOpenedForWrite(); |
| blocksRd = m.blocksReadTotal(); |
| blocksRdRmt = m.blocksReadRemote(); |
| blocksWrt = m.blocksWrittenTotal(); |
| blocksWrtRmt = m.blocksWrittenRemote(); |
| bytesRd = m.bytesRead(); |
| bytesRdTm = m.bytesReadTime(); |
| bytesWrt = m.bytesWritten(); |
| bytesWrtTm = m.bytesWriteTime(); |
| } |
| |
| /** |
| * Add given metrics. |
| * |
| * @param m Metrics to add. |
| * @return Self for method chaining. |
| */ |
| public VisorIgfsMetrics add(VisorIgfsMetrics m) { |
| assert m != null; |
| |
| totalSpaceSz += m.totalSpaceSz; |
| usedSpaceSz += m.usedSpaceSz; |
| foldersCnt += m.foldersCnt; |
| filesCnt += m.filesCnt; |
| filesOpenedForRd += m.filesOpenedForRd; |
| filesOpenedForWrt += m.filesOpenedForWrt; |
| blocksRd += m.blocksRd; |
| blocksRdRmt += m.blocksRdRmt; |
| blocksWrt += m.blocksWrt; |
| blocksWrtRmt += m.blocksWrtRmt; |
| bytesRd += m.bytesRd; |
| bytesRdTm += m.bytesRdTm; |
| bytesWrt += m.bytesWrt; |
| bytesWrtTm += m.bytesWrtTm; |
| |
| return this; |
| } |
| |
| /** |
| * Aggregate metrics. |
| * |
| * @param n Nodes count. |
| * @return Self for method chaining. |
| */ |
| public VisorIgfsMetrics aggregate(int n) { |
| if (n > 0) { |
| foldersCnt /= n; |
| filesCnt /= n; |
| } |
| |
| return this; |
| } |
| |
| /** |
| * @return Maximum amount of data that can be stored on local node. |
| */ |
| public long getTotalSpaceSize() { |
| return totalSpaceSz; |
| } |
| |
| /** |
| * @return Local used space in bytes on local node. |
| */ |
| public long getUsedSpaceSize() { |
| return usedSpaceSz; |
| } |
| |
| /** |
| * @return Local free space in bytes on local node. |
| */ |
| public long getFreeSpaceSize() { |
| return totalSpaceSz - usedSpaceSz; |
| } |
| |
| /** |
| * @return Number of directories created in file system. |
| */ |
| public int getFoldersCount() { |
| return foldersCnt; |
| } |
| |
| /** |
| * @return Number of files stored in file system. |
| */ |
| public int getFilesCount() { |
| return filesCnt; |
| } |
| |
| /** |
| * @return Number of files that are currently opened for reading on local node. |
| */ |
| public int getFilesOpenedForRead() { |
| return filesOpenedForRd; |
| } |
| |
| /** |
| * @return Number of files that are currently opened for writing on local node. |
| */ |
| public int getFilesOpenedForWrite() { |
| return filesOpenedForWrt; |
| } |
| |
| /** |
| * @return Total blocks read, local and remote. |
| */ |
| public long getBlocksRead() { |
| return blocksRd; |
| } |
| |
| /** |
| * @return Total remote blocks read. |
| */ |
| public long getBlocksReadRemote() { |
| return blocksRdRmt; |
| } |
| |
| /** |
| * @return Total blocks write, local and remote. |
| */ |
| public long getBlocksWritten() { |
| return blocksWrt; |
| } |
| |
| /** |
| * @return Total remote blocks write. |
| */ |
| public long getBlocksWrittenRemote() { |
| return blocksWrtRmt; |
| } |
| |
| /** |
| * @return Total bytes read. |
| */ |
| public long getBytesRead() { |
| return bytesRd; |
| } |
| |
| /** |
| * @return Total bytes read time. |
| */ |
| public long getBytesReadTime() { |
| return bytesRdTm; |
| } |
| |
| /** |
| * @return Total bytes write. |
| */ |
| public long getBytesWritten() { |
| return bytesWrt; |
| } |
| |
| /** |
| * @return Total bytes write time. |
| */ |
| public long getBytesWriteTime() { |
| return bytesWrtTm; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override protected void writeExternalData(ObjectOutput out) throws IOException { |
| out.writeLong(totalSpaceSz); |
| out.writeLong(usedSpaceSz); |
| out.writeInt(foldersCnt); |
| out.writeInt(filesCnt); |
| out.writeInt(filesOpenedForRd); |
| out.writeInt(filesOpenedForWrt); |
| out.writeLong(blocksRd); |
| out.writeLong(blocksRdRmt); |
| out.writeLong(blocksWrt); |
| out.writeLong(blocksWrtRmt); |
| out.writeLong(bytesRd); |
| out.writeLong(bytesRdTm); |
| out.writeLong(bytesWrt); |
| out.writeLong(bytesWrtTm); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException { |
| totalSpaceSz = in.readLong(); |
| usedSpaceSz = in.readLong(); |
| foldersCnt = in.readInt(); |
| filesCnt = in.readInt(); |
| filesOpenedForRd = in.readInt(); |
| filesOpenedForWrt = in.readInt(); |
| blocksRd = in.readLong(); |
| blocksRdRmt = in.readLong(); |
| blocksWrt = in.readLong(); |
| blocksWrtRmt = in.readLong(); |
| bytesRd = in.readLong(); |
| bytesRdTm = in.readLong(); |
| bytesWrt = in.readLong(); |
| bytesWrtTm = in.readLong(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return S.toString(VisorIgfsMetrics.class, this); |
| } |
| } |