Package com.foundationdb.server.service.stats

Source Code of com.foundationdb.server.service.stats.StatisticsServiceImpl$Routines

/**
* Copyright (C) 2009-2013 FoundationDB, LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.foundationdb.server.service.stats;

import com.foundationdb.ais.model.AkibanInformationSchema;
import com.foundationdb.ais.model.Routine;
import com.foundationdb.ais.model.TableName;
import com.foundationdb.ais.model.aisb2.AISBBasedBuilder;
import com.foundationdb.ais.model.aisb2.NewAISBuilder;
import com.foundationdb.server.service.Service;
import com.foundationdb.server.service.config.ConfigurationService;
import com.foundationdb.server.service.security.SecurityService;
import com.foundationdb.server.service.security.SecurityServiceImpl.Routines;
import com.foundationdb.server.store.SchemaManager;
import com.foundationdb.sql.server.ServerCallContextStack;
import com.foundationdb.sql.server.ServerQueryContext;
import com.foundationdb.util.tap.Tap;
import com.foundationdb.util.tap.TapReport;
import com.google.inject.Inject;

public final class StatisticsServiceImpl implements StatisticsService, Service {

    private static final String STATISTICS_PROPERTY = "fdbsql.statistics";
    private static final String SCHEMA = TableName.SYS_SCHEMA;
    private static final String SET_ENABLED = "taps_set_enabled";
    private static final String RESET     = "taps_reset";

    @Inject
    public StatisticsServiceImpl(ConfigurationService config,
            SchemaManager schemaManager) {
        this.config = config;
        this.schemaManager = schemaManager;
    }

    @Override
    public void setEnabled(final String regExPattern, final boolean on) {
        Tap.setEnabled(regExPattern, on);
    }

    @Override
    public void reset(final String regExPattern) {
        Tap.reset(regExPattern);
    }

    @Override
    public TapReport[] getReport(final String regExPattern) {
        return Tap.getReport(regExPattern);
    }


    @Override
    public void start() {
        String stats_enable = config.getProperty(STATISTICS_PROPERTY);

        if (stats_enable.length() > 0) {
            Tap.setEnabled(stats_enable, true);
        }
        registerSystemObjects();
    }

    @Override
    public void stop() {
      deregisterSystemObjects();
    }
   
   
    @Override
    public void crash() {
      deregisterSystemObjects();
    }

    protected void registerSystemObjects() {
        AkibanInformationSchema ais = buildSystemObjects();
        schemaManager.registerSystemRoutine(ais.getRoutine(SCHEMA, SET_ENABLED));
        schemaManager.registerSystemRoutine(ais.getRoutine(SCHEMA, RESET));
    }

    protected void deregisterSystemObjects() {
        schemaManager.unRegisterSystemRoutine(new TableName(SCHEMA, SET_ENABLED));
        schemaManager.unRegisterSystemRoutine(new TableName(SCHEMA, RESET));
     
    }
   
    protected AkibanInformationSchema buildSystemObjects() {
        NewAISBuilder builder = AISBBasedBuilder.create(SCHEMA, schemaManager.getTypesTranslator());
       
        builder.procedure(SET_ENABLED)
        .language("java", Routine.CallingConvention.JAVA)
        .paramStringIn("tap_names", 128)
        .paramStringIn("enable", 128)
        .externalName(Routines.class.getName(), "setEnabled");
       
        builder.procedure(RESET)
        .language("java", Routine.CallingConvention.JAVA)
        .paramStringIn("tap_names", 128)
        .externalName(Routines.class.getName(), "resetTaps");
       
        return builder.ais(true);
    }
   
    private final ConfigurationService config;
    private final SchemaManager schemaManager;

    // TODO: Temporary way of accessing these via stored procedures.
    public static class Routines {
        public static void setEnabled(String tapNames, String enable) {
             boolean enabled = Boolean.parseBoolean(enable);
             getService().setEnabled(tapNames, enabled);
        }

        public static void resetTaps(String tapNames) {
          getService().reset(tapNames);
        }
       
        private static StatisticsService getService() {
            ServerQueryContext context = ServerCallContextStack.getCallingContext();
            return context.getServiceManager().getStatisticsService();
        }
    }
}
TOP

Related Classes of com.foundationdb.server.service.stats.StatisticsServiceImpl$Routines

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.