blob: 5ffa406b1a3a630ea1eb30541133c19a1fa4271d [file] [log] [blame]
/*
* 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.accumulo.monitor.rest.tables;
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.apache.accumulo.core.data.TableId;
import org.apache.accumulo.core.master.thrift.TableInfo;
import org.apache.accumulo.monitor.util.JaxbAbstractIdSerializer;
/**
* Generates table information as a JSON object
*
* @since 2.0.0
*/
public class TableInformation {
private final String ZERO_COMBO = "0(0)";
// Variable names become JSON keys
public String tablename;
@XmlJavaTypeAdapter(JaxbAbstractIdSerializer.class)
public TableId tableId;
public String tableState;
public int tablets;
public int onlineTablets;
public long recs;
public long recsInMemory;
public double ingestRate;
public double ingestByteRate;
public double query;
public double queryByteRate;
public CompactionsList majorCompactions;
// running compactions with queued in parenthesis
public String majorCombo;
public CompactionsList minorCompactions;
// running compactions with queued in parenthesis
public String minorCombo;
public CompactionsList scans;
// running scans with queued in parenthesis
public String scansCombo;
private int queuedMajorCompactions;
private int runningMajorCompactions;
private int queuedMinorCompactions;
private int runningMinorCompactions;
private int queuedScans;
private int runningScans;
public double entriesRead;
public double entriesReturned;
public Double holdTime;
public int offlineTablets;
public TableInformation() {}
/**
* Generate a table with just the state
*
* @param tableName
* Table name to create
* @param tableId
* Table ID to create
* @param tableState
* State of the table
*/
public TableInformation(String tableName, TableId tableId, String tableState) {
this.tablename = tableName;
this.tableId = tableId;
this.tableState = tableState;
this.tablets = 0;
this.offlineTablets = 0;
this.onlineTablets = 0;
this.recs = 0;
this.recsInMemory = 0;
this.ingestRate = 0;
this.ingestByteRate = 0;
this.query = 0;
this.queryByteRate = 0;
this.entriesRead = 0;
this.entriesReturned = 0;
this.holdTime = 0.0;
this.majorCompactions = new CompactionsList(0, 0);
this.majorCombo = ZERO_COMBO;
this.minorCompactions = new CompactionsList(0, 0);
this.minorCombo = ZERO_COMBO;
this.scans = new CompactionsList(0, 0);
this.scansCombo = ZERO_COMBO;
}
/**
* Generate table based on the thrift table info
*
* @param tableName
* Name of the table to create
* @param tableId
* ID of the table to create
* @param info
* Thift table info
* @param holdTime
* Hold time for the table
* @param tableState
* State of the table
*/
public TableInformation(String tableName, TableId tableId, TableInfo info, Double holdTime,
String tableState) {
this.tablename = tableName;
this.tableId = tableId;
this.tablets = info.tablets;
this.offlineTablets = info.tablets - info.onlineTablets;
this.onlineTablets = info.onlineTablets;
this.recs = info.recs;
this.recsInMemory = info.recsInMemory;
this.ingestRate = cleanNumber(info.getIngestRate());
this.ingestByteRate = cleanNumber(info.getIngestByteRate());
this.query = cleanNumber(info.getQueryRate());
this.queryByteRate = cleanNumber(info.getQueryByteRate());
this.entriesRead = cleanNumber(info.scanRate);
this.entriesReturned = cleanNumber(info.queryRate);
this.holdTime = holdTime;
if (info.scans != null) {
this.queuedScans = info.scans.queued;
this.runningScans = info.scans.running;
this.scansCombo = info.scans.running + "(" + info.scans.queued + ")";
} else {
this.queuedScans = 0;
this.runningScans = 0;
this.scansCombo = ZERO_COMBO;
}
if (info.minors != null) {
this.queuedMinorCompactions = info.minors.queued;
this.runningMinorCompactions = info.minors.running;
this.minorCombo = info.minors.running + "(" + info.minors.queued + ")";
} else {
this.queuedMinorCompactions = 0;
this.runningMinorCompactions = 0;
this.minorCombo = ZERO_COMBO;
}
if (info.majors != null) {
this.queuedMajorCompactions = info.majors.queued;
this.runningMajorCompactions = info.majors.running;
this.majorCombo = info.majors.running + "(" + info.majors.queued + ")";
} else {
this.queuedMajorCompactions = 0;
this.runningMajorCompactions = 0;
this.majorCombo = ZERO_COMBO;
}
this.majorCompactions = new CompactionsList(runningMajorCompactions, queuedMajorCompactions);
this.minorCompactions = new CompactionsList(runningMinorCompactions, queuedMinorCompactions);
this.scans = new CompactionsList(runningScans, queuedScans);
this.tableState = tableState;
}
/**
* Return zero for fractions. Partial numbers don't make sense in metrics.
*/
private double cleanNumber(double dirtyNumber) {
return dirtyNumber < 1 ? 0 : dirtyNumber;
}
}