ws_fsService.hpp 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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. struct CDropZoneFileFilter
  21. {
  22. StringAttr name;
  23. bool dirOnly;
  24. bool fileOnly;
  25. CDropZoneFileFilter(const char* _name, bool _dirOnly, bool _fileOnly)
  26. : name(_name), dirOnly(_dirOnly), fileOnly(_fileOnly) {};
  27. };
  28. class Schedule : public Thread
  29. {
  30. bool stopping;
  31. Semaphore semSchedule;
  32. IEspContainer* m_container;
  33. public:
  34. Schedule()
  35. {
  36. stopping = false;
  37. };
  38. ~Schedule()
  39. {
  40. stopping = true;
  41. semSchedule.signal();
  42. join();
  43. }
  44. virtual int run();
  45. virtual void setContainer(IEspContainer * container)
  46. {
  47. m_container = container;
  48. }
  49. };
  50. class CFileSprayEx : public CFileSpray
  51. {
  52. public:
  53. virtual void init(IPropertyTree *cfg, const char *process, const char *service);
  54. virtual void setContainer(IEspContainer * container)
  55. {
  56. CFileSpray::setContainer(container);
  57. m_sched.setContainer(container);
  58. }
  59. virtual bool onEchoDateTime(IEspContext &context, IEspEchoDateTime &req, IEspEchoDateTimeResponse &resp)
  60. {
  61. resp.setResult("0000-00-00T00:00:00");
  62. return true;
  63. }
  64. virtual bool onShowResult(IEspContext &context, IEspShowResultRequest &req, IEspShowResultResponse &resp)
  65. {
  66. resp.setResult(req.getResult());
  67. return true;
  68. }
  69. virtual bool onDFUWUSearch(IEspContext &context, IEspDFUWUSearchRequest & req, IEspDFUWUSearchResponse & resp);
  70. virtual bool onGetDFUWorkunits(IEspContext &context, IEspGetDFUWorkunits &req, IEspGetDFUWorkunitsResponse &resp);
  71. virtual bool onGetDFUWorkunit(IEspContext &context, IEspGetDFUWorkunit &req, IEspGetDFUWorkunitResponse &resp);
  72. virtual bool onCreateDFUWorkunit(IEspContext &context, IEspCreateDFUWorkunit &req, IEspCreateDFUWorkunitResponse &resp);
  73. virtual bool onUpdateDFUWorkunit(IEspContext &context, IEspUpdateDFUWorkunit &req, IEspUpdateDFUWorkunitResponse &resp);
  74. virtual bool onDeleteDFUWorkunits(IEspContext &context, IEspDeleteDFUWorkunits &req, IEspDeleteDFUWorkunitsResponse &resp);
  75. virtual bool onDeleteDFUWorkunit(IEspContext &context, IEspDeleteDFUWorkunit &req, IEspDeleteDFUWorkunitResponse &resp);
  76. virtual bool onSubmitDFUWorkunit(IEspContext &context, IEspSubmitDFUWorkunit &req, IEspSubmitDFUWorkunitResponse &resp);
  77. virtual bool onAbortDFUWorkunit(IEspContext &context, IEspAbortDFUWorkunit &req, IEspAbortDFUWorkunitResponse &resp);
  78. virtual bool onGetDFUExceptions(IEspContext &context, IEspGetDFUExceptions &req, IEspGetDFUExceptionsResponse &resp);
  79. virtual bool onSprayFixed(IEspContext &context, IEspSprayFixed &req, IEspSprayFixedResponse &resp);
  80. virtual bool onSprayVariable(IEspContext &context, IEspSprayVariable &req, IEspSprayResponse &resp);
  81. virtual bool onReplicate(IEspContext &context, IEspReplicate &req, IEspReplicateResponse &resp);
  82. virtual bool onDespray(IEspContext &context, IEspDespray &req, IEspDesprayResponse &resp);
  83. virtual bool onCopy(IEspContext &context, IEspCopy &req, IEspCopyResponse &resp);
  84. virtual bool onRename(IEspContext &context, IEspRename &req, IEspRenameResponse &resp);
  85. virtual bool onDFUWUFile(IEspContext &context, IEspDFUWUFileRequest &req, IEspDFUWUFileResponse &resp);
  86. virtual bool onFileList(IEspContext &context, IEspFileListRequest &req, IEspFileListResponse &resp);
  87. virtual bool onDFUWorkunitsAction(IEspContext &context, IEspDFUWorkunitsActionRequest &req, IEspDFUWorkunitsActionResponse &resp);
  88. virtual bool onDfuMonitor(IEspContext &context, IEspDfuMonitorRequest &req, IEspDfuMonitorResponse &resp);
  89. virtual bool onGetDFUProgress(IEspContext &context, IEspProgressRequest &req, IEspProgressResponse &resp);
  90. virtual bool onOpenSave(IEspContext &context, IEspOpenSaveRequest &req, IEspOpenSaveResponse &resp);
  91. virtual bool onDropZoneFileSearch(IEspContext &context, IEspDropZoneFileSearchRequest &req, IEspDropZoneFileSearchResponse &resp);
  92. virtual bool onDropZoneFiles(IEspContext &context, IEspDropZoneFilesRequest &req, IEspDropZoneFilesResponse &resp);
  93. virtual bool onDeleteDropZoneFiles(IEspContext &context, IEspDeleteDropZoneFilesRequest &req, IEspDFUWorkunitsActionResponse &resp);
  94. virtual bool onGetSprayTargets(IEspContext &context, IEspGetSprayTargetsRequest &req, IEspGetSprayTargetsResponse &resp);
  95. protected:
  96. StringBuffer m_QueueLabel;
  97. StringBuffer m_MonitorQueueLabel;
  98. StringBuffer m_RootFolder;
  99. Schedule m_sched;
  100. Owned<IPropertyTree> directories;
  101. void addToQueryString(StringBuffer &queryString, const char *name, const char *value);
  102. int doFileCheck(const char* mask, const char* netaddr, const char* osStr, const char* path);
  103. void getInfoFromSasha(IEspContext &context, const char *sashaServer, const char* wuid, IEspDFUWorkunit *info);
  104. bool getArchivedWUInfo(IEspContext &context, IEspGetDFUWorkunit &req, IEspGetDFUWorkunitResponse &resp);
  105. bool GetArchivedDFUWorkunits(IEspContext &context, IEspGetDFUWorkunits &req, IEspGetDFUWorkunitsResponse &resp);
  106. bool getDropZoneFiles(IEspContext &context, const char* netaddr, const char* osStr, const char* path, IEspDropZoneFilesRequest &req, IEspDropZoneFilesResponse &resp);
  107. bool ParseLogicalPath(const char * pLogicalPath, StringBuffer &title);
  108. bool ParseLogicalPath(const char * pLogicalPath, const char *group, const char* cluster, StringBuffer &folder, StringBuffer &title, StringBuffer &defaultFolder, StringBuffer &defaultReplicateFolder);
  109. StringBuffer& getAcceptLanguage(IEspContext& context, StringBuffer& acceptLanguage);
  110. void appendGroupNode(IArrayOf<IEspGroupNode>& groupNodes, const char* nodeName, const char* clusterType, bool replicateOutputs);
  111. bool getOneDFUWorkunit(IEspContext& context, const char* wuid, IEspGetDFUWorkunitsResponse& resp);
  112. const char* getDropZoneDirByIP(const char* destIP, StringBuffer& dir);
  113. void queryDropZoneInfo(const char* dropZone, const char* pathReq, StringBuffer& path, EnvMachineOS& os, IpAddress& ip);
  114. void addDropZoneFile(IEspContext& context, IDirectoryIterator* di, const char* name, const char* path,
  115. IArrayOf<IEspPhysicalFileStruct>& filesInFolder, IArrayOf<IEspPhysicalFileStruct>&files);
  116. bool searchDropZoneFileInFolder(IEspContext& context, IFile* f, CDropZoneFileFilter& filter, bool skipMask,
  117. StringBuffer& relPath, EnvMachineOS& os, IArrayOf<IEspPhysicalFileStruct>& files);
  118. void searchDropZoneFileInFolder(IEspContext& context, CDropZoneFileFilter& filter, IpAddress& ip,
  119. EnvMachineOS& os, const char* path, IArrayOf<IEspPhysicalFileStruct>& files);
  120. };
  121. #endif //_ESPWIZ_FileSpray_HPP__