All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.shulie.druid.wall.WallTableStat Maven / Gradle / Ivy

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * 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.
 */
package com.shulie.druid.wall;

import static com.shulie.druid.util.JdbcSqlStatUtils.get;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.atomic.AtomicLongFieldUpdater;

import com.shulie.druid.support.json.JSONUtils;

public class WallTableStat {

    private volatile long                                 selectCount;
    private volatile long                                 selectIntoCount;
    private volatile long                                 insertCount;
    private volatile long                                 updateCount;
    private volatile long                                 deleteCount;
    private volatile long                                 truncateCount;
    private volatile long                                 createCount;
    private volatile long                                 alterCount;
    private volatile long                                 dropCount;
    private volatile long                                 replaceCount;
    private volatile long                                 deleteDataCount;
    private volatile long                                 updateDataCount;
    private volatile long                                 insertDataCount;
    private volatile long                                 fetchRowCount;

    final static AtomicLongFieldUpdater    selectCountUpdater                 = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "selectCount");
    final static AtomicLongFieldUpdater    selectIntoCountUpdater             = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "selectIntoCount");
    final static AtomicLongFieldUpdater    insertCountUpdater                 = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "insertCount");
    final static AtomicLongFieldUpdater    updateCountUpdater                 = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "updateCount");
    final static AtomicLongFieldUpdater    deleteCountUpdater                 = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "deleteCount");
    final static AtomicLongFieldUpdater    truncateCountUpdater               = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "truncateCount");
    final static AtomicLongFieldUpdater    createCountUpdater                 = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "createCount");
    final static AtomicLongFieldUpdater    alterCountUpdater                  = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "alterCount");
    final static AtomicLongFieldUpdater    dropCountUpdater                   = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "dropCount");
    final static AtomicLongFieldUpdater    replaceCountUpdater                = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "replaceCount");

    final static AtomicLongFieldUpdater    deleteDataCountUpdater             = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "deleteDataCount");
    final static AtomicLongFieldUpdater    insertDataCountUpdater             = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "insertDataCount");
    final static AtomicLongFieldUpdater    updateDataCountUpdater             = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "updateDataCount");

    final static AtomicLongFieldUpdater    fetchRowCountUpdater               = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "fetchRowCount");

    private volatile long                                 fetchRowCount_0_1;
    private volatile long                                 fetchRowCount_1_10;
    private volatile long                                 fetchRowCount_10_100;
    private volatile int                                  fetchRowCount_100_1000;
    private volatile int                                  fetchRowCount_1000_10000;
    private volatile int                                  fetchRowCount_10000_more;

    final static AtomicLongFieldUpdater    fetchRowCount_0_1_Updater          = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "fetchRowCount_0_1");
    final static AtomicLongFieldUpdater    fetchRowCount_1_10_Updater         = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "fetchRowCount_1_10");
    final static AtomicLongFieldUpdater    fetchRowCount_10_100_Updater       = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "fetchRowCount_10_100");
    final static AtomicIntegerFieldUpdater fetchRowCount_100_1000_Updater     = AtomicIntegerFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                    "fetchRowCount_100_1000");
    final static AtomicIntegerFieldUpdater fetchRowCount_1000_10000_Updater   = AtomicIntegerFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                    "fetchRowCount_1000_10000");
    final static AtomicIntegerFieldUpdater fetchRowCount_10000_more_Updater   = AtomicIntegerFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                    "fetchRowCount_10000_more");

    private volatile long                                 updateDataCount_0_1;
    private volatile long                                 updateDataCount_1_10;
    private volatile long                                 updateDataCount_10_100;
    private volatile int                                  updateDataCount_100_1000;
    private volatile int                                  updateDataCount_1000_10000;
    private volatile int                                  updateDataCount_10000_more;

    final static AtomicLongFieldUpdater    updateDataCount_0_1_Updater        = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "updateDataCount_0_1");
    final static AtomicLongFieldUpdater    updateDataCount_1_10_Updater       = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "updateDataCount_1_10");
    final static AtomicLongFieldUpdater    updateDataCount_10_100_Updater     = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "updateDataCount_10_100");
    final static AtomicIntegerFieldUpdater updateDataCount_100_1000_Updater   = AtomicIntegerFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                    "updateDataCount_100_1000");
    final static AtomicIntegerFieldUpdater updateDataCount_1000_10000_Updater = AtomicIntegerFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                    "updateDataCount_1000_10000");
    final static AtomicIntegerFieldUpdater updateDataCount_10000_more_Updater = AtomicIntegerFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                    "updateDataCount_10000_more");

    private volatile long                                 deleteDataCount_0_1;
    private volatile long                                 deleteDataCount_1_10;
    private volatile long                                 deleteDataCount_10_100;
    private volatile int                                  deleteDataCount_100_1000;
    private volatile int                                  deleteDataCount_1000_10000;
    private volatile int                                  deleteDataCount_10000_more;

    final static AtomicLongFieldUpdater    deleteDataCount_0_1_Updater        = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "deleteDataCount_0_1");
    final static AtomicLongFieldUpdater    deleteDataCount_1_10_Updater       = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "deleteDataCount_1_10");
    final static AtomicLongFieldUpdater    deleteDataCount_10_100_Updater     = AtomicLongFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                 "deleteDataCount_10_100");
    final static AtomicIntegerFieldUpdater deleteDataCount_100_1000_Updater   = AtomicIntegerFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                    "deleteDataCount_100_1000");
    final static AtomicIntegerFieldUpdater deleteDataCount_1000_10000_Updater = AtomicIntegerFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                    "deleteDataCount_1000_10000");
    final static AtomicIntegerFieldUpdater deleteDataCount_10000_more_Updater = AtomicIntegerFieldUpdater.newUpdater(WallTableStat.class,
                                                                                                                                    "deleteDataCount_10000_more");

    public WallTableStat(){

    }

    public long getSelectCount() {
        return selectCount;
    }

    public long getSelectIntoCount() {
        return selectIntoCount;
    }

    public long getInsertCount() {
        return insertCount;
    }

    public long getUpdateCount() {
        return updateCount;
    }

    public long getDeleteCount() {
        return deleteCount;
    }

    public long getTruncateCount() {
        return truncateCount;
    }

    public long getCreateCount() {
        return createCount;
    }

    public long getAlterCount() {
        return alterCount;
    }

    public long getDropCount() {
        return dropCount;
    }

    public long getReplaceCount() {
        return replaceCount;
    }

    public long getDeleteDataCount() {
        return this.deleteDataCount;
    }

    public long[] getDeleteDataCountHistogramValues() {
        return new long[] {
                //
                deleteDataCount_0_1, //
                deleteDataCount_1_10, //
                deleteDataCount_10_100, //
                deleteDataCount_100_1000, //
                deleteDataCount_1000_10000, //
                deleteDataCount_10000_more //
        };
    }

    public void addDeleteDataCount(long delta) {
        deleteDataCountUpdater.addAndGet(this, delta);
        
        if (delta < 1) {
            deleteDataCount_0_1_Updater.incrementAndGet(this);
        } else if (delta < 10) {
            deleteDataCount_1_10_Updater.incrementAndGet(this);
        } else if (delta < 100) {
            deleteDataCount_10_100_Updater.incrementAndGet(this);
        } else if (delta < 1000) {
            deleteDataCount_100_1000_Updater.incrementAndGet(this);
        } else if (delta < 10000) {
            deleteDataCount_1000_10000_Updater.incrementAndGet(this);
        } else {
            deleteDataCount_10000_more_Updater.incrementAndGet(this);
        }
    }

    public long getUpdateDataCount() {
        return this.updateDataCount;
    }

    public long[] getUpdateDataCountHistogramValues() {
        return new long[] {
                //
                updateDataCount_0_1, //
                updateDataCount_1_10, //
                updateDataCount_10_100, //
                updateDataCount_100_1000, //
                updateDataCount_1000_10000, //
                updateDataCount_10000_more //
        };
    }

    public long getInsertDataCount() {
        return this.insertDataCount;
    }

    public void addInsertDataCount(long delta) {
        insertDataCountUpdater.addAndGet(this, delta);
    }

    public void addUpdateDataCount(long delta) {
        updateDataCountUpdater.addAndGet(this, delta);

        if (delta < 1) {
            updateDataCount_0_1_Updater.incrementAndGet(this);
        } else if (delta < 10) {
            updateDataCount_1_10_Updater.incrementAndGet(this);
        } else if (delta < 100) {
            updateDataCount_10_100_Updater.incrementAndGet(this);
        } else if (delta < 1000) {
            updateDataCount_100_1000_Updater.incrementAndGet(this);
        } else if (delta < 10000) {
            updateDataCount_1000_10000_Updater.incrementAndGet(this);
        } else {
            updateDataCount_10000_more_Updater.incrementAndGet(this);
        }
    }

    public long getFetchRowCount() {
        return fetchRowCount;
    }

    public long[] getFetchRowCountHistogramValues() {
        return new long[] {
                //
                fetchRowCount_0_1, //
                fetchRowCount_1_10, //
                fetchRowCount_10_100, //
                fetchRowCount_100_1000, //
                fetchRowCount_1000_10000, //
                fetchRowCount_10000_more //
        };
    }

    public void addFetchRowCount(long delta) {
        fetchRowCountUpdater.addAndGet(this, delta);

        if (delta < 1) {
            fetchRowCount_0_1_Updater.incrementAndGet(this);
        } else if (delta < 10) {
            fetchRowCount_1_10_Updater.incrementAndGet(this);
        } else if (delta < 100) {
            fetchRowCount_10_100_Updater.incrementAndGet(this);
        } else if (delta < 1000) {
            fetchRowCount_100_1000_Updater.incrementAndGet(this);
        } else if (delta < 10000) {
            fetchRowCount_1000_10000_Updater.incrementAndGet(this);
        } else {
            fetchRowCount_10000_more_Updater.incrementAndGet(this);
        }
    }

    public void addSqlTableStat(WallSqlTableStat stat) {
        {
            long val = stat.getSelectCount();
            if (val > 0) {
                selectCountUpdater.addAndGet(this, val);
            }
        }
        {
            long val = stat.getSelectIntoCount();
            if (val > 0) {
                selectIntoCountUpdater.addAndGet(this, val);
            }
        }
        {
            long val = stat.getInsertCount();
            if (val > 0) {
                insertCountUpdater.addAndGet(this, val);
            }
        }
        {
            long val = stat.getUpdateCount();
            if (val > 0) {
                updateCountUpdater.addAndGet(this, val);
            }
        }
        {
            long val = stat.getDeleteCount();
            if (val > 0) {
                deleteCountUpdater.addAndGet(this, val);
            }
        }
        {
            long val = stat.getAlterCount();
            if (val > 0) {
                alterCountUpdater.addAndGet(this, val);
            }
        }
        {
            long val = stat.getTruncateCount();
            if (val > 0) {
                truncateCountUpdater.addAndGet(this, val);
            }
        }
        {
            long val = stat.getCreateCount();
            if (val > 0) {
                createCountUpdater.addAndGet(this, val);
            }
        }
        {
            long val = stat.getDropCount();
            if (val > 0) {
                dropCountUpdater.addAndGet(this, val);
            }
        }
        {
            long val = stat.getReplaceCount();
            if (val > 0) {
                replaceCountUpdater.addAndGet(this, val);
            }
        }
    }

    public String toString() {

        Map map = toMap();

        return JSONUtils.toJSONString(map);
    }

    public Map toMap() {
        Map map = new LinkedHashMap();
        return toMap(map);
    }

    public WallTableStatValue getStatValue(boolean reset) {
        WallTableStatValue statValue = new WallTableStatValue();

        statValue.setSelectCount(get(this, selectCountUpdater, reset));
        statValue.setDeleteCount(get(this, deleteCountUpdater, reset));
        statValue.setInsertCount(get(this, insertCountUpdater, reset));
        statValue.setUpdateCount(get(this, updateCountUpdater, reset));
        statValue.setAlterCount(get(this, alterCountUpdater, reset));
        statValue.setDropCount(get(this, dropCountUpdater, reset));
        statValue.setCreateCount(get(this, createCountUpdater, reset));
        statValue.setTruncateCount(get(this, truncateCountUpdater, reset));
        statValue.setReplaceCount(get(this, replaceCountUpdater, reset));
        statValue.setDeleteDataCount(get(this, deleteDataCountUpdater, reset));
        statValue.setFetchRowCount(get(this, fetchRowCountUpdater, reset));
        statValue.setUpdateDataCount(get(this, updateDataCountUpdater, reset));

        statValue.fetchRowCount_0_1 = get(this, fetchRowCount_0_1_Updater, reset);
        statValue.fetchRowCount_1_10 = get(this, fetchRowCount_1_10_Updater, reset);
        statValue.fetchRowCount_10_100 = get(this, fetchRowCount_10_100_Updater, reset);
        statValue.fetchRowCount_100_1000 = get(this, fetchRowCount_100_1000_Updater, reset);
        statValue.fetchRowCount_1000_10000 = get(this, fetchRowCount_1000_10000_Updater, reset);
        statValue.fetchRowCount_10000_more = get(this, fetchRowCount_10000_more_Updater, reset);

        statValue.updateDataCount_0_1 = get(this, updateDataCount_0_1_Updater, reset);
        statValue.updateDataCount_1_10 = get(this, updateDataCount_1_10_Updater, reset);
        statValue.updateDataCount_10_100 = get(this, updateDataCount_10_100_Updater, reset);
        statValue.updateDataCount_100_1000 = get(this, updateDataCount_100_1000_Updater, reset);
        statValue.updateDataCount_1000_10000 = get(this, updateDataCount_1000_10000_Updater, reset);
        statValue.updateDataCount_10000_more = get(this, updateDataCount_10000_more_Updater, reset);

        statValue.deleteDataCount_0_1 = get(this, deleteDataCount_0_1_Updater, reset);
        statValue.deleteDataCount_1_10 = get(this, deleteDataCount_1_10_Updater, reset);
        statValue.deleteDataCount_10_100 = get(this, deleteDataCount_10_100_Updater, reset);
        statValue.deleteDataCount_100_1000 = get(this, deleteDataCount_100_1000_Updater, reset);
        statValue.deleteDataCount_1000_10000 = get(this, deleteDataCount_1000_10000_Updater, reset);
        statValue.deleteDataCount_10000_more = get(this, deleteDataCount_10000_more_Updater, reset);

        return statValue;
    }

    public Map toMap(Map map) {
        return getStatValue(false).toMap(map);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy