/* * * Copyright 2016 OrientDB LTD (info(at)orientdb.com) * * Licensed 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. * * * * For more information: http://orientdb.com * */ package com.orientechnologies.orient.core.storage.impl.local.statistic; import com.orientechnologies.orient.core.record.impl.ODocument; /** * Container for cluster related performance numbers */ public class OClusterCountersHolder extends OSessionStoragePerformanceStatistic.PerformanceCountersHolder { /** * Amount of all created records. */ long createdRecords; /** * Total time is needed to create all records */ long timeRecordCreation; long createRecordPages; long createRecordFilePages; long createRecordPageReadTime; long createRecordFilePageReadTime; /** * Amount of all deleted records */ long deletedRecords; /** * Total time is needed to delete all records */ long timeRecordDeletion; long deleteRecordPages; long deleteRecordFilePages; long deleteRecordPageReadTime = 0; long deleteRecordFilePageReadTime = 0; /** * Amount of all updated records */ long updatedRecords; /** * Total time which is needed to update all records */ long timeRecordUpdate; long updateRecordPages; long updateRecordFilePages; long updateRecordPageReadTime; long updateRecordFilePageReadTime; /** * Amount of all read records */ long readRecords; /** * Total time which is needed to read all records. */ long timeRecordRead; long readRecordPages; long readRecordFilePages; long readRecordPageReadTime; long readRecordFilePageReadTime; @Override public OClusterCountersHolder newInstance() { return new OClusterCountersHolder(); } @Override public void clean() { super.clean(); createdRecords = 0; timeRecordCreation = 0; createRecordPages = 0; createRecordFilePages = 0; createRecordPageReadTime = 0; createRecordFilePageReadTime = 0; deletedRecords = 0; timeRecordDeletion = 0; deleteRecordPages = 0; deleteRecordFilePages = 0; deleteRecordPageReadTime = 0; deleteRecordFilePageReadTime = 0; updatedRecords = 0; timeRecordUpdate = 0; updateRecordPages = 0; updateRecordFilePages = 0; updateRecordPageReadTime = 0; updateRecordFilePageReadTime = 0; readRecords = 0; timeRecordRead = 0; readRecordPages = 0; readRecordFilePages = 0; readRecordPageReadTime = 0; readRecordFilePageReadTime = 0; } public long getRecordCreationTime() { if (createdRecords == 0) return -1; return timeRecordCreation / createdRecords; } public long getRecordCreationPages() { if (createdRecords == 0) return -1; return createRecordPages / createdRecords; } public int getRecordCreationHitRate() { if (createRecordPages == 0) return -1; return (int) ((100 * (createRecordPages - createRecordFilePages)) / createRecordPages); } public long getRecordCreationPageTime() { if (createRecordPages == 0) return -1; return createRecordPageReadTime / createRecordPages; } public long getRecordCreationFilePageTime() { if (createRecordFilePages == 0) return -1; return createRecordFilePageReadTime / createRecordFilePages; } public long getRecordDeletionTime() { if (deletedRecords == 0) return -1; return timeRecordDeletion / deletedRecords; } public long getRecordDeletionPages() { if (deletedRecords == 0) return -1; return deleteRecordPages / deletedRecords; } public long getRecordDeletionHitRate() { if (deleteRecordPages == 0) return -1; return (int) (100 * (deleteRecordPages - deleteRecordFilePages) / deleteRecordPages); } public long getRecordDeletionPageTime() { if (deleteRecordPages == 0) return -1; return deleteRecordPageReadTime / deleteRecordPages; } public long getRecordDeletionFilePageTime() { if (deleteRecordFilePages == 0) return -1; return deleteRecordFilePageReadTime / deleteRecordFilePages; } public long getRecordUpdateTime() { if (updatedRecords == 0) return -1; return timeRecordUpdate / updatedRecords; } public long getRecordUpdatePages() { if (updatedRecords == 0) return -1; return updateRecordPages / updatedRecords; } public long getRecordUpdateHitRate() { if (updateRecordPages == 0) return -1; return (int) (100 * (updateRecordPages - updateRecordFilePages) / updateRecordPages); } public long getRecordUpdatePageTime() { if (updateRecordPages == 0) return -1; return updateRecordPageReadTime / updateRecordPages; } public long getRecordUpdateFilePageTime() { if (updateRecordFilePages == 0) return -1; return updateRecordFilePageReadTime / updateRecordFilePages; } public long getRecordReadTime() { if (readRecords == 0) return -1; return timeRecordRead / readRecords; } public long getRecordReadPages() { if (readRecords == 0) return -1; return readRecordPages / readRecords; } public long getRecordReadHitRate() { if (readRecordPages == 0) return -1; return (int) (100 * (readRecordPages - readRecordFilePages) / readRecordPages); } public long getRecordReadPageTime() { if (readRecordPages == 0) return -1; return readRecordPageReadTime / readRecordPages; } public long getRecordReadFilePageTime() { if (readRecordFilePages == 0) return -1; return readRecordFilePageReadTime / readRecordFilePages; } @Override public ODocument toDocument() { final ODocument document = super.toDocument(); OSessionStoragePerformanceStatistic.writeMetric(document,"recordCreationTime", getRecordCreationTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordCreationPages", getRecordCreationPages()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordCreationHitRate", getRecordCreationHitRate()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordCreationPageTime", getRecordCreationPageTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordCreationFilePageTime", getRecordCreationFilePageTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordDeletionTime", getRecordDeletionTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordDeletionPages", getRecordDeletionPages()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordDeletionHitRate", getRecordDeletionHitRate()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordDeletionPageTime", getRecordDeletionPageTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordDeletionFilePageTime", getRecordDeletionFilePageTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordUpdateTime", getRecordUpdateTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordUpdatePages", getRecordUpdatePages()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordUpdateHitRate", getRecordUpdateHitRate()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordUpdatePageTime", getRecordUpdatePageTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordUpdateFilePageTime", getRecordUpdateFilePageTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordReadTime", getRecordReadTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordReadPages", getRecordReadPages()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordReadHitRate", getRecordReadHitRate()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordReadPageTime", getRecordReadPageTime()); OSessionStoragePerformanceStatistic.writeMetric(document,"recordReadFilePageTime", getRecordReadFilePageTime()); return document; } public class CreateRecordOperation extends OOperation { @Override void incrementOperationsCounter(int pages, int filePages) { createRecordPages += pages; createRecordFilePages += filePages; } } public class UpdateRecordOperation extends OOperation { @Override void incrementOperationsCounter(int pages, int filePages) { OClusterCountersHolder.this.updateRecordPages += pages; OClusterCountersHolder.this.updateRecordFilePages += filePages; } } public class DeleteRecordPages extends OOperation { @Override void incrementOperationsCounter(int pages, int filePages) { OClusterCountersHolder.this.deleteRecordPages += pages; OClusterCountersHolder.this.deleteRecordFilePages += filePages; } } public class ReadRecordPages extends OOperation { @Override void incrementOperationsCounter(int pages, int filePages) { OClusterCountersHolder.this.readRecordPages += pages; OClusterCountersHolder.this.readRecordFilePages += filePages; } } }