NfsFsStat.java

/**
 * Copyright 2016-2018 Dell Inc. or its subsidiaries. All rights reserved.
 *
 * <p>Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file
 * except in compliance with the License. A copy of the License is located at
 *
 * <p>http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 * <p>or in the "license" file accompanying this file. This file 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 com.emc.ecs.nfsclient.nfs;

import com.emc.ecs.nfsclient.rpc.Xdr;

/**
 * Holder for volatile file system state information, as specified by RFC 1813
 * (https://tools.ietf.org/html/rfc1813).
 *
 * @author seibed
 */
public class NfsFsStat {

  /** The total size, in bytes, of the file system. */
  public long tbytes;

  /** The amount of free space, in bytes, in the file system. */
  public long fbytes;

  /**
   * The amount of free space, in bytes, available to the user identified by the authentication
   * information in the RPC. (This reflects space that is reserved by the file system; it does not
   * reflect any quota system implemented by the server.)
   */
  public long bytes;

  /**
   * The total number of file slots in the file system. (On a UNIX server, this often corresponds to
   * the number of inodes configured.)
   */
  public long tfiles;

  /** The number of free file slots in the file system. */
  public long ffiles;

  /**
   * The number of free file slots that are available to the user corresponding to the
   * authentication information in the RPC. (This reflects slots that are reserved by the file
   * system; it does not reflect any quota system implemented by the server.)
   */
  public long afiles;

  /**
   * A measure of file system volatility: this is the number of seconds for which the file system is
   * not expected to change. For a volatile, frequently updated file system, this will be 0. For an
   * immutable file system, such as a CD-ROM, this would be the largest unsigned integer. For file
   * systems that are infrequently modified, for example, one containing local executable programs
   * and on-line documentation, a value corresponding to a few hours or days might be used. The
   * client may use this as a hint in tuning its cache management. Note however, this measure is
   * assumed to be dynamic and may change at any time.
   */
  public long invarsec;

  /**
   * Unmarshalls volatile file system state information, as specified by RFC 1813
   * (https://tools.ietf.org/html/rfc1813).
   */
  public NfsFsStat(Xdr xdr) {
    tbytes = xdr.getLong();
    fbytes = xdr.getLong();
    bytes = xdr.getLong();
    tfiles = xdr.getLong();
    ffiles = xdr.getLong();
    afiles = xdr.getLong();
    invarsec = xdr.getUnsignedInt();
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();

    sb.append(" total size:");
    sb.append(String.valueOf(tbytes));
    sb.append(" amount of free space:");
    sb.append(String.valueOf(fbytes));
    sb.append(" amount of free space to the user:");
    sb.append(String.valueOf(bytes));
    sb.append(" total number of file slots:");
    sb.append(String.valueOf(tbytes));
    sb.append(" number of free file slots:");
    sb.append(String.valueOf(tfiles));
    sb.append(" number of free file slots to the user:");
    sb.append(String.valueOf(afiles));
    sb.append(" file system volatility:");
    sb.append(String.valueOf(invarsec));

    return sb.toString();
  }
}