SIGN IN SIGN UP
TarsCloud / Tars UNCLAIMED

Tars is a high-performance RPC framework based on name service and Tars protocol, also integrated administration platform, and implemented hosting-service via flexible schedule.

0 0 36 C++
2017-01-18 16:19:06 +08:00
/**
* Tencent is pleased to support the open source community by making Tars available.
*
* Copyright (C) 2016THL A29 Limited, a Tencent company. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* 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.
*/
#ifndef __SERVERLIMITRESOURCE_H_
#define __SERVERLIMITRESOURCE_H_
#include <unistd.h>
#include <iostream>
#include "util/tc_monitor.h"
#include "util/tc_autoptr.h"
using namespace tars;
using namespace std;
class ServerLimitResource : public TC_ThreadLock, public TC_HandleBase
{
public:
ServerLimitResource(int iMaxCount=3,int iTimeInterval=5/*分钟*/,int iExpiredTime=30/*分钟*/,const string& app="",const string& servername="");
~ServerLimitResource(){}
public:
void setLimitCheckInfo(int iMaxCount,int iTimeInterval,int iExpiredTime);
/**
* @brief 服务异常重启记录
*
*1 如果在_coreLimitTimeInterval时间段内则增加异常个数
*2 判断异常个数如果在时间段内达到core限制_maxExcStopCount则屏蔽core属性_closeCore
* 并记录当前时间戳_enableCoreLimitTime
*/
void addExcStopRecord();
/**
*@brief 检查是否需要关闭或者打开core
*
*1 如果服务core被关闭则先检查被关闭的时间戳如果过期且本服务没有配置manual关闭则打开core属性
*2 检查core开关如果true则关闭core则异步通知服务关闭否则打开开关
*
*/
int IsCoreLimitNeedClose(bool& bClose);
//重置内部的运行时数据
void resetRunTimeData();
private:
//字段分为两类,运行时数据和配置数据
bool _closeCore; //屏蔽core开关, 运行时
int _curExcStopCount; //当前服务异常停止个数, 运行时
int _maxExcStopCount; //最大服务异常停止个数,配置
time_t _excStopRecordTime; //第一次异常停止时间, 运行时
int32_t _coreLimitTimeInterval; //时间间隔内core的限制单位是分钟配置
time_t _enableCoreLimitTime; //上一次关闭core的时间, 运行时
int32_t _coreLimitExpiredTime; //core关闭的持续时间,单位为分钟,配置
string _appName; //应用名
string _serverName; //服务名
};
typedef TC_AutoPtr<ServerLimitResource> ServerLimitResourcePtr;
#endif