/* * Copyright (c) 2018 MariaDB Corporation Ab * * Use of this software is governed by the Business Source License included * in the LICENSE.TXT file and at www.mariadb.com/bsl11. * * Change Date: 2022-01-01 * * On the date above, in accordance with the Business Source License, use * of this software will be governed by version 2 or later of the General * Public License. */ #pragma once #include #include #include #include "examplefiltersession.hh" /** * Defines general data for the filter. This object is generated when MaxScale starts and deleted at * shutdown. When MaxScale is routing queries, this object may be accessed from multiple threads * concurrently. This should be considered if the object contains fields that are unsafe to * access/modify concurrently. */ class ExampleFilter : public maxscale::Filter { // Prevent copy-constructor and assignment operator usage ExampleFilter(const ExampleFilter&); ExampleFilter& operator=(const ExampleFilter&); public: ~ExampleFilter(); /** * Creates a new filter instance. A separate function from the ctor is used so that NULL can be * returned on failure. * * @param zName The name given to the filter in the configuration file. Can be stored if required for * e.g. log messages. * @param ppParams Configuration parameters parsed from the configuration file * @return The object on success, NULL on failure. Failure is typically caused by an invalid * configuration parameter. */ static ExampleFilter* create(const char* zName, MXS_CONFIG_PARAMETER* ppParams); /* * Creates a new session for this filter. This is called when a new client connects. * * @param pSession The generic MaxScale session object. * @return The new session, or NULL on failure. */ ExampleFilterSession* newSession(MXS_SESSION* pSession); /* * Print diagnostics to a DCB. This is called when the admin tool MaxAdmin asks for the status of this * filter. Run MaxAdmin with "./maxadmin show filters" in the MaxScale binary directory. * * @param pDcb The connection descriptor to print diagnostic to */ void diagnostics(DCB* pDcb) const; /* * Returns JSON form diagnostic data. This is called when the admin tool MaxCtrl asks for the status * of this filter. Run MaxCtrl with "./maxctrl show filters" in the MaxScale binary directory. * * @return Json object */ json_t* diagnostics_json() const; /* * Get filter capabilities. This is used by protocol code to find out what kind of data the filter * expects. * * @return Capabilities as a bitfield */ uint64_t getCapabilities(); // Specific to ExampleFilter. Called by a session when it sees a query. void query_seen(); // Specific to ExampleFilter. Called by a session when it sees a reply. void reply_seen(); private: // Used by the create function ExampleFilter(const MXS_CONFIG_PARAMETER* pParams); // The fields are specific to ExampleFilter. std::atomic m_total_queries {0}; /**< How many queries has this filter seen */ std::atomic m_total_replies {0}; /**< How many replies has this filter seen */ bool m_collect_global_counts {false}; /**< Should sessions manipulate the total counts */ };