ddc
Server.h
Go to the documentation of this file.
1 //-*- Mode: C++ -*-
2 //
3 // DDC originally by Alexey Sokirko
4 // Changes and modifications 2011-2020 by Bryan Jurish
5 //
6 // This file is part of DDC.
7 //
8 // DDC is free software: you can redistribute it and/or modify
9 // it under the terms of the GNU Lesser General Public License as published by
10 // the Free Software Foundation, either version 3 of the License, or
11 // (at your option) any later version.
12 //
13 // DDC is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public License
19 // along with DDC. If not, see <http://www.gnu.org/licenses/>.
20 //
21 #ifndef DDC_SERVER_H
22 #define DDC_SERVER_H
23 
24 #include "ServerOptions.h"
25 #include "ServerStats.h"
26 #include "../CommonLib/CHost.h"
27 #include "../ConcordLib/ConcHolder.h"
28 #include "../CommonLib/ddcThreadQueue.h"
29 
30 #ifdef WIN32
31 #include <process.h> /* _beginthread, _endthread */
32 #else
33 #endif
34 
35 //#define DEBUG_HIT_SORT
36 #ifdef DEBUG_HIT_SORT
37 # define HSDEBUG(s) ddcLog(s)
38 # define HIT_SORT_DEBUG(x) x
39 #else
40 # define HSDEBUG(s)
41 # define HIT_SORT_DEBUG(x)
42 #endif
43 
44 //==============================================================================
46 class CDDCServer : public CHost
47 {
48 public:
50  static const char *AdditionalHitDelimiter;
51 
53  static const size_t MaxSubhostsSize = 256;
54 
57 
59  time_t m_tStarted;
60 
63 
66 
67  /* whether to log "normal" requests received in ProcessSocketString() */
69 
70  /* set of request commands NOT to be logged (e.g. "status", "info", etc.) */
71  set<string> m_noLogCommands;
72 
73  /* FQDN if available, otherwise symbolic hostname as returned by gethostname() */
74  string m_FQHostName;
75 
77  size_t m_nWorkers;
78 
81 
88 
90  size_t m_WorkerId;
91 
94 
95 public:
96  //--------------------------------------------------------------
97  // Constructors etc.
98 
100  CDDCServer();
101 
103  virtual ~CDDCServer()
104  { this->Shutdown(); };
105 
107  virtual void Shutdown(bool quiet=false);
108 
110  virtual void SetOptions(const CDDCServerOptions &Options);
111 
112 public:
113  //--------------------------------------------------------------
114  // DDCServer API: client threads
115 
117  virtual void StartClientThreads();
118 
125  virtual CDDCServer* WorkerClone(void) const
126  { return new CDDCServer(); };
127 
134  virtual void WorkerCloneInit(const CDDCServer *Parent, size_t WorkerId);
135 
137  virtual void WorkerCloneFree(void);
138 
143  inline bool UseClientThreads(void) const
144  { return m_ThreadPool!=NULL; };
145 
146 public:
147  //--------------------------------------------------------------
148  // CHost API: socket handlers
149 
153  virtual void RunThread();
154 
156  virtual void HandleClientConnection(SOCKET& rConnectedSocket);
157 
159  virtual string ProcessSocketString(const string& SocketInput, SOCKET& rConnectedSocket);
160 
161 public:
162  //--------------------------------------------------------------
163  // DDCServer API: request handlers: required
164 
166  virtual void handle__get_first_hits(string &Result, const char *Query, int TimeOut, size_t ResultLimit, const string& ReqPath, const NavHint& Hint);
167 
169  virtual void handle__get_hit_strings(string &Result, const char *ResultType, size_t StartHitNo, size_t ResultLimit);
170 
172  virtual void handle__run_query(string &Result, const char *CorpusName, const char *Query, const char *ResultType, size_t StartHitNo, size_t ResultLimit, int TimeOut, const string& ReqPath, const NavHint& Hint);
173 
175  virtual void handle__expand_terms(string &Result, const string& pipeline, const string& terms, int timeout, const string &corpus);
176 
178  virtual void handle__status(string &Result, int timeout=10, bool verbose=false);
179 
181  virtual void handle__info(string &Result, int timeout=10, bool verbose=false);
182 
184  virtual void handle__reload(string &Result, int depth=0);
185 
187  virtual void handle__clear_cache(string &Result, int depth=0);
188 
190  virtual void handle__nodes(string &Result, int depth=-1);
191 
192 public:
193  //--------------------------------------------------------------
194  // DDCServer API: request handlers: optional
195 
197  virtual void handle__get_first_hits(string &Result, const char *Query, int TimeOut, size_t ResultLimit);
198 
200  virtual void handle__run_query(string &Result, const char *CorpusName, const char *Query, const char *ResultType, size_t StartHitNo, size_t ResultLimit, int TimeOut);
201 
203  virtual void handle__get_paradigm(string &Result, const char *Word, int iLemmatizeOnly, int iLang);
204 
206  virtual void handle__close_socket(string &Result, SOCKET &rConnectedSocket);
207 
209  virtual void handle__version(string &Result);
210 
212  virtual void handle__vstatus(string &Result, int timeout=10);
213 
215  virtual void handle__vinfo(string &Result, int timeout=10);
216 
217 public:
218  //--------------------------------------------------------------
219  // DDCServer: utilities
220  inline void method_not_implemented(const char *methodName)
221  { throw CExpc(errRuntime, "DDCServer API method %s not implemented for object %s", methodName, typeid(*this).name()); };
222 
224  virtual size_t residentMemorySize(void) const;
225 
227  virtual size_t totalMemorySize(void) const;
228 
230  void findPathHint(const string& ReqStr, size_t StartPos, size_t &PathPos, size_t &HintPos);
231 };
232 
233 #endif /* DDC_SERVER_H */
234 
235 /*--- emacs style variables ---
236  * Local Variables:
237  * mode: C++
238  * c-file-style: "ellemtel"
239  * c-basic-offset: 4
240  * tab-width: 8
241  * indent-tabs-mode: nil
242  * End:
243  */
Definition: ServerStats.h:34
virtual void WorkerCloneInit(const CDDCServer *Parent, size_t WorkerId)
Definition: Server.cpp:126
virtual void HandleClientConnection(int &rConnectedSocket)
Definition: Server.cpp:150
virtual void handle__nodes(string &Result, int depth=-1)
Definition: Server.cpp:491
virtual void StartClientThreads()
Definition: Server.cpp:109
#define SOCKET
Definition: string_socket.h:66
static const char * AdditionalHitDelimiter
Definition: Server.h:50
virtual void handle__clear_cache(string &Result, int depth=0)
Definition: Server.cpp:485
virtual size_t residentMemorySize(void) const
Definition: Server.cpp:499
generic local exception class moo: derived from stdexcept runtime_error
Definition: utilit.h:183
size_t m_nWorkers
Definition: Server.h:77
virtual string ProcessSocketString(const string &SocketInput, int &rConnectedSocket)
Definition: Server.cpp:166
virtual void handle__get_paradigm(string &Result, const char *Word, int iLemmatizeOnly, int iLang)
Definition: Server.cpp:429
virtual void handle__close_socket(string &Result, int &rConnectedSocket)
Definition: Server.cpp:442
virtual void handle__expand_terms(string &Result, const string &pipeline, const string &terms, int timeout, const string &corpus)
Definition: Server.cpp:423
virtual void handle__reload(string &Result, int depth=0)
Definition: Server.cpp:479
virtual CDDCServer * WorkerClone(void) const
Definition: Server.h:125
double m_SlowQueryTimeout
Definition: Server.h:87
virtual void handle__version(string &Result)
Definition: Server.cpp:449
virtual void handle__info(string &Result, int timeout=10, bool verbose=false)
Definition: Server.cpp:467
CDDCServerStats m_ServerStats
Definition: Server.h:62
generic socket host wrapper class irritatingly also used for client connections
Definition: CHost.h:31
DDCVersionT m_VersionCompat
Definition: Server.h:56
bool UseClientThreads(void) const
Definition: Server.h:143
size_t m_ThreadQueueSize
Definition: Server.h:80
void method_not_implemented(const char *methodName)
Definition: Server.h:220
set< string > m_noLogCommands
Definition: Server.h:71
Definition: DDCInternalError.h:33
Definition: ServerOptions.h:30
Definition: Server.h:46
virtual size_t totalMemorySize(void) const
Definition: Server.cpp:506
navigation hint with respect to local subcorpus tree, for get_first_hits "paging" ...
Definition: NavHint.h:115
virtual void handle__get_hit_strings(string &Result, const char *ResultType, size_t StartHitNo, size_t ResultLimit)
Definition: Server.cpp:405
virtual void WorkerCloneFree(void)
Definition: Server.cpp:138
static const size_t MaxSubhostsSize
Definition: Server.h:53
high-level class used by CDDCServer for a per-client thread pool
Definition: ServerThread.h:75
virtual void handle__get_first_hits(string &Result, const char *Query, int TimeOut, size_t ResultLimit, const string &ReqPath, const NavHint &Hint)
Definition: Server.cpp:392
virtual void Shutdown(bool quiet=false)
Definition: Server.cpp:70
virtual ~CDDCServer()
Definition: Server.h:103
size_t m_WorkerId
Definition: Server.h:90
class CDDCServerThreadPool * m_ThreadPool
Definition: Server.h:93
CDDCServer()
Definition: Server.cpp:41
virtual void handle__status(string &Result, int timeout=10, bool verbose=false)
Definition: Server.cpp:455
void findPathHint(const string &ReqStr, size_t StartPos, size_t &PathPos, size_t &HintPos)
Definition: Server.cpp:513
bool m_bLogRequests
Definition: Server.h:68
Definition: ddcVersion.h:12
virtual void SetOptions(const CDDCServerOptions &Options)
Definition: Server.cpp:89
virtual void RunThread()
Definition: Server.cpp:143
string m_FQHostName
Definition: Server.h:74
CDDCServerStats m_SessionStats
Definition: Server.h:65
virtual void handle__vinfo(string &Result, int timeout=10)
Definition: Server.cpp:473
time_t m_tStarted
Definition: Server.h:59
virtual void handle__run_query(string &Result, const char *CorpusName, const char *Query, const char *ResultType, size_t StartHitNo, size_t ResultLimit, int TimeOut, const string &ReqPath, const NavHint &Hint)
Definition: Server.cpp:411
virtual void handle__vstatus(string &Result, int timeout=10)
Definition: Server.cpp:461