| /** @file |
| |
| Definitions for the LocalManager class. |
| |
| @section license License |
| |
| 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. |
| */ |
| |
| #pragma once |
| |
| #include <string> |
| |
| #include "BaseManager.h" |
| #include "records/I_RecHttp.h" |
| #include "tscore/I_Version.h" |
| |
| #include <syslog.h> |
| #if TS_HAS_WCCP |
| #include <wccp/Wccp.h> |
| #endif |
| #if HAVE_EVENTFD |
| #include <sys/eventfd.h> |
| #endif |
| |
| class Alarms; |
| class FileManager; |
| |
| enum ManagementPendingOperation { |
| MGMT_PENDING_NONE, // Do nothing |
| MGMT_PENDING_RESTART, // Restart TS and TM |
| MGMT_PENDING_BOUNCE, // Restart TS |
| MGMT_PENDING_STOP, // Stop TS |
| MGMT_PENDING_DRAIN, // Drain TS |
| MGMT_PENDING_IDLE_RESTART, // Restart TS and TM when TS is idle |
| MGMT_PENDING_IDLE_BOUNCE, // Restart TS when TS is idle |
| MGMT_PENDING_IDLE_STOP, // Stop TS when TS is idle |
| MGMT_PENDING_IDLE_DRAIN, // Drain TS when TS is idle from new connections |
| MGMT_PENDING_UNDO_DRAIN, // Recover TS from drain |
| }; |
| |
| class LocalManager : public BaseManager |
| { |
| public: |
| explicit LocalManager(bool proxy_on, bool listen); |
| ~LocalManager(); |
| |
| void initAlarm(); |
| void initCCom(const AppVersionInfo &version, FileManager *files, int mcport, char *addr, int rsport); |
| void initMgmtProcessServer(); |
| void pollMgmtProcessServer(); |
| void handleMgmtMsgFromProcesses(MgmtMessageHdr *mh); |
| void sendMgmtMsgToProcesses(int msg_id, const char *data_str); |
| void sendMgmtMsgToProcesses(int msg_id, const char *data_raw, int data_len); |
| void sendMgmtMsgToProcesses(MgmtMessageHdr *mh); |
| |
| void signalFileChange(const char *var_name); |
| void signalEvent(int msg_id, const char *data_str); |
| void signalEvent(int msg_id, const char *data_raw, int data_len); |
| void signalAlarm(int alarm_id, const char *desc = nullptr, const char *ip = nullptr); |
| |
| void processEventQueue(); |
| bool startProxy(const char *onetime_options); |
| void listenForProxy(); |
| void bindUdpProxyPort(HttpProxyPort &); |
| void bindTcpProxyPort(HttpProxyPort &); |
| void closeProxyPorts(); |
| |
| void mgmtCleanup(); |
| void mgmtShutdown(); |
| void processShutdown(bool mainThread = false); |
| void processRestart(); |
| void processBounce(); |
| void processDrain(int to_drain = 1); |
| void rollLogFiles(); |
| void clearStats(const char *name = nullptr); |
| void hostStatusSetDown(const char *marshalled_req, int len); |
| void hostStatusSetUp(const char *marshalled_req, int len); |
| |
| bool processRunning(); |
| |
| bool run_proxy; |
| bool listen_for_proxy; |
| bool proxy_recoverable = true; // false if traffic_server cannot recover with a reboot |
| time_t manager_started_at; |
| time_t proxy_started_at = -1; |
| int proxy_launch_count = 0; |
| bool proxy_launch_outstanding = false; |
| ManagementPendingOperation mgmt_shutdown_outstanding = MGMT_PENDING_NONE; |
| time_t mgmt_shutdown_triggered_at; |
| time_t mgmt_drain_triggered_at; |
| int proxy_running = 0; |
| HttpProxyPort::Group m_proxy_ports; |
| // Local inbound addresses to bind, if set. |
| IpAddr m_inbound_ip4; |
| IpAddr m_inbound_ip6; |
| |
| int process_server_timeout_secs; |
| int process_server_timeout_msecs; |
| |
| char *absolute_proxy_binary; |
| char *proxy_name; |
| char *proxy_binary; |
| std::string proxy_options; // These options should persist across proxy reboots |
| char *env_prep; |
| |
| int process_server_sockfd = ts::NO_FD; |
| int watched_process_fd = ts::NO_FD; |
| #if HAVE_EVENTFD |
| int wakeup_fd = ts::NO_FD; // external trigger to stop polling |
| #endif |
| pid_t proxy_launch_pid = -1; |
| |
| Alarms *alarm_keeper = nullptr; |
| FileManager *configFiles = nullptr; |
| |
| pid_t watched_process_pid = -1; |
| |
| int syslog_facility = LOG_DAEMON; |
| |
| #if TS_HAS_WCCP |
| wccp::Cache wccp_cache; |
| #endif |
| private: |
| }; /* End class LocalManager */ |
| |
| extern LocalManager *lmgmt; |