blob: 22b84646242dc27c59c5d8289404944e88d36db0 [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.kylin.rest.response;
import org.apache.kylin.cube.CubeInstance;
import org.apache.kylin.metadata.model.ISourceAware;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.kylin.metadata.realization.RealizationStatusEnum;
/**
*/
@SuppressWarnings("serial")
public class CubeInstanceResponse extends CubeInstance {
@JsonProperty("project")
private String project;
@JsonProperty("model")
private String model;
@JsonProperty("is_streaming")
private boolean isStreaming;
@JsonProperty("partitionDateColumn")
private String partitionDateColumn;
@JsonProperty("partitionDateStart")
private long partitionDateStart;
@JsonProperty("isStandardPartitioned")
private boolean isStandardPartitioned;
@JsonProperty("size_kb")
private long sizeKB;
@JsonProperty("input_records_count")
private long inputRecordCnt;
@JsonProperty("input_records_size")
private long inputRecordSizeBytes;
@JsonProperty("can_add_measure")
private boolean canAddMeasure;
public CubeInstanceResponse(CubeInstance cube, String project) {
this.project = project;
if (cube == null)
return;
setUuid(cube.getUuid());
setVersion(cube.getVersion());
setName(cube.getName());
setOwner(cube.getOwner());
setDescName(cube.getDescName());
setCost(cube.getCost());
setStatus(cube.getStatus());
setSegments(cube.getSegments());
setCreateTimeUTC(cube.getCreateTimeUTC());
setLastModified(cube.getDescriptor().getLastModified());
setCuboidLastOptimized(cube.getCuboidLastOptimized());
this.model = cube.getDescriptor().getModelName();
this.partitionDateStart = cube.getDescriptor().getPartitionDateStart();
// cuz model doesn't have a state to label a model is broken,
// so in some case the model can not be loaded due to some check failed,
// but the cube in this model can still be loaded.
if (cube.getModel() != null) {
this.partitionDateColumn = cube.getModel().getPartitionDesc().getPartitionDateColumn();
this.isStandardPartitioned = cube.getModel().isStandardPartitionedDateColumn();
this.isStreaming = cube.getModel().getRootFactTable().getTableDesc()
.getSourceType() == ISourceAware.ID_STREAMING;
}
initSizeKB();
initInputRecordCount();
initInputRecordSizeBytes();
this.canAddMeasure = checkCanAddMeasure(cube);
}
protected void setModel(String model) {
this.model = model;
}
protected void initSizeKB() {
this.sizeKB = super.getSizeKB();
}
protected void initInputRecordCount() {
this.inputRecordCnt = super.getInputRecordCount();
}
protected void initInputRecordSizeBytes() {
this.inputRecordSizeBytes = super.getInputRecordSizeBytes();
}
private boolean checkCanAddMeasure(CubeInstance cube) {
if (!cube.getConfig().isEditableMetricCube()) {
return false;
}
if (!cube.getStatus().equals(RealizationStatusEnum.DISABLED)) {
return false;
}
if (cube.getSegments().size() == 0) {
return false;
}
return true;
}
}