ws_fsService.hpp 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /*##############################################################################
  2. HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. ############################################################################## */
  13. #ifndef _ESPWIZ_FileSpray_HPP__
  14. #define _ESPWIZ_FileSpray_HPP__
  15. #include "ws_fs_esp.ipp"
  16. #include "msgbuilder.hpp"
  17. #include "jthread.hpp"
  18. #include "dfuwu.hpp"
  19. #include "environment.hpp"
  20. #include "TpWrapper.hpp"
  21. class Schedule : public Thread
  22. {
  23. bool stopping;
  24. Semaphore semSchedule;
  25. IEspContainer* m_container;
  26. bool detached;
  27. public:
  28. Schedule()
  29. {
  30. stopping = false;
  31. detached = false;
  32. m_container = nullptr;
  33. };
  34. ~Schedule()
  35. {
  36. stopping = true;
  37. semSchedule.signal();
  38. join();
  39. }
  40. virtual int run();
  41. virtual void setContainer(IEspContainer * container)
  42. {
  43. m_container = container;
  44. if (m_container)
  45. setDetachedState(!m_container->isAttachedToDali());
  46. }
  47. void setDetachedState(bool detached_)
  48. {
  49. if (detached != detached_)
  50. {
  51. detached = detached_;
  52. semSchedule.signal();
  53. }
  54. }
  55. };
  56. class CFileSprayEx : public CFileSpray
  57. {
  58. void readAndCheckSpraySourceReq(MemoryBuffer& srcxml, const char* srcIP, const char* srcPath, const char* srcplane,
  59. StringBuffer& sourceIPReq, StringBuffer& sourcePathReq);
  60. public:
  61. virtual void init(IPropertyTree *cfg, const char *process, const char *service);
  62. virtual void setContainer(IEspContainer * container)
  63. {
  64. CFileSpray::setContainer(container);
  65. m_sched.setContainer(container);
  66. }
  67. virtual bool onEchoDateTime(IEspContext &context, IEspEchoDateTime &req, IEspEchoDateTimeResponse &resp)
  68. {
  69. resp.setResult("0000-00-00T00:00:00");
  70. return true;
  71. }
  72. virtual bool onShowResult(IEspContext &context, IEspShowResultRequest &req, IEspShowResultResponse &resp)
  73. {
  74. resp.setResult(req.getResult());
  75. return true;
  76. }
  77. bool attachServiceToDali() override
  78. {
  79. m_sched.setDetachedState(false);
  80. return true;
  81. }
  82. bool detachServiceFromDali() override
  83. {
  84. m_sched.setDetachedState(true);
  85. return true;
  86. }
  87. virtual bool onDFUWUSearch(IEspContext &context, IEspDFUWUSearchRequest & req, IEspDFUWUSearchResponse & resp);
  88. virtual bool onGetDFUWorkunits(IEspContext &context, IEspGetDFUWorkunits &req, IEspGetDFUWorkunitsResponse &resp);
  89. virtual bool onGetDFUWorkunit(IEspContext &context, IEspGetDFUWorkunit &req, IEspGetDFUWorkunitResponse &resp);
  90. virtual bool onCreateDFUWorkunit(IEspContext &context, IEspCreateDFUWorkunit &req, IEspCreateDFUWorkunitResponse &resp);
  91. virtual bool onUpdateDFUWorkunit(IEspContext &context, IEspUpdateDFUWorkunit &req, IEspUpdateDFUWorkunitResponse &resp);
  92. virtual bool onDeleteDFUWorkunits(IEspContext &context, IEspDeleteDFUWorkunits &req, IEspDeleteDFUWorkunitsResponse &resp);
  93. virtual bool onDeleteDFUWorkunit(IEspContext &context, IEspDeleteDFUWorkunit &req, IEspDeleteDFUWorkunitResponse &resp);
  94. virtual bool onSubmitDFUWorkunit(IEspContext &context, IEspSubmitDFUWorkunit &req, IEspSubmitDFUWorkunitResponse &resp);
  95. virtual bool onAbortDFUWorkunit(IEspContext &context, IEspAbortDFUWorkunit &req, IEspAbortDFUWorkunitResponse &resp);
  96. virtual bool onGetDFUExceptions(IEspContext &context, IEspGetDFUExceptions &req, IEspGetDFUExceptionsResponse &resp);
  97. virtual bool onSprayFixed(IEspContext &context, IEspSprayFixed &req, IEspSprayFixedResponse &resp);
  98. virtual bool onSprayVariable(IEspContext &context, IEspSprayVariable &req, IEspSprayResponse &resp);
  99. virtual bool onReplicate(IEspContext &context, IEspReplicate &req, IEspReplicateResponse &resp);
  100. virtual bool onDespray(IEspContext &context, IEspDespray &req, IEspDesprayResponse &resp);
  101. virtual bool onCopy(IEspContext &context, IEspCopy &req, IEspCopyResponse &resp);
  102. virtual bool onRename(IEspContext &context, IEspRename &req, IEspRenameResponse &resp);
  103. virtual bool onDFUWUFile(IEspContext &context, IEspDFUWUFileRequest &req, IEspDFUWUFileResponse &resp);
  104. virtual bool onFileList(IEspContext &context, IEspFileListRequest &req, IEspFileListResponse &resp);
  105. virtual bool onDFUWorkunitsAction(IEspContext &context, IEspDFUWorkunitsActionRequest &req, IEspDFUWorkunitsActionResponse &resp);
  106. virtual bool onDfuMonitor(IEspContext &context, IEspDfuMonitorRequest &req, IEspDfuMonitorResponse &resp);
  107. virtual bool onGetDFUProgress(IEspContext &context, IEspProgressRequest &req, IEspProgressResponse &resp);
  108. virtual bool onOpenSave(IEspContext &context, IEspOpenSaveRequest &req, IEspOpenSaveResponse &resp);
  109. virtual bool onDropZoneFileSearch(IEspContext &context, IEspDropZoneFileSearchRequest &req, IEspDropZoneFileSearchResponse &resp);
  110. virtual bool onDropZoneFiles(IEspContext &context, IEspDropZoneFilesRequest &req, IEspDropZoneFilesResponse &resp);
  111. virtual bool onDeleteDropZoneFiles(IEspContext &context, IEspDeleteDropZoneFilesRequest &req, IEspDFUWorkunitsActionResponse &resp);
  112. virtual bool onGetSprayTargets(IEspContext &context, IEspGetSprayTargetsRequest &req, IEspGetSprayTargetsResponse &resp);
  113. virtual bool onGetDFUServerQueues(IEspContext &context, IEspGetDFUServerQueuesRequest &req, IEspGetDFUServerQueuesResponse &resp);
  114. protected:
  115. StringBuffer m_QueueLabel;
  116. StringBuffer m_MonitorQueueLabel;
  117. Schedule m_sched;
  118. Owned<IPropertyTree> directories;
  119. void addToQueryString(StringBuffer &queryString, const char *name, const char *value);
  120. void getInfoFromSasha(IEspContext &context, const char *sashaServer, const char* wuid, IEspDFUWorkunit *info);
  121. bool getArchivedWUInfo(IEspContext &context, IEspGetDFUWorkunit &req, IEspGetDFUWorkunitResponse &resp);
  122. bool GetArchivedDFUWorkunits(IEspContext &context, IEspGetDFUWorkunits &req, IEspGetDFUWorkunitsResponse &resp);
  123. bool getDropZoneFiles(IEspContext &context, const char* dropZone, const char* netaddr, const char* path, IEspDropZoneFilesRequest &req, IEspDropZoneFilesResponse &resp);
  124. bool ParseLogicalPath(const char * pLogicalPath, StringBuffer &title);
  125. bool ParseLogicalPath(const char * pLogicalPath, const char *group, const char* cluster, StringBuffer &folder, StringBuffer &title, StringBuffer &defaultFolder, StringBuffer &defaultReplicateFolder);
  126. StringBuffer& getAcceptLanguage(IEspContext& context, StringBuffer& acceptLanguage);
  127. void appendGroupNode(IArrayOf<IEspGroupNode>& groupNodes, const char* nodeName, const char* clusterType, bool replicateOutputs);
  128. bool getOneDFUWorkunit(IEspContext& context, const char* wuid, IEspGetDFUWorkunitsResponse& resp);
  129. void getDropZoneInfoByIP(double clientVersion, const char* destIP, const char* destFile, StringBuffer& path, StringBuffer& mask);
  130. void getDropZoneInfoByDestPlane(double clientVersion, const char* destGroup, const char* destFileIn, StringBuffer& destFileOut, StringBuffer& umask, StringBuffer & hostip);
  131. bool checkDropZoneIPAndPath(double clientVersion, const char* dropZone, const char* netAddr, const char* path);
  132. void addDropZoneFile(IEspContext& context, IDirectoryIterator* di, const char* name, const char pathSep, IArrayOf<IEspPhysicalFileStruct>&files);
  133. void searchDropZoneFiles(IEspContext& context, IpAddress& ip, const char* dir, const char* nameFilter, IArrayOf<IEspPhysicalFileStruct>& files, unsigned& filesFound);
  134. void setDFUServerQueueReq(const char* dfuServerQueue, IDFUWorkUnit* wu);
  135. void setUserAuth(IEspContext &context, IDFUWorkUnit* wu);
  136. };
  137. #endif //_ESPWIZ_FileSpray_HPP__