瀏覽代碼

* Rework to use new fpdebugcapture unit

Michaël Van Canneyt 1 年之前
父節點
當前提交
00330a562c
共有 1 個文件被更改,包括 26 次插入103 次删除
  1. 26 103
      utils/pas2js/httpcompiler.pp

+ 26 - 103
utils/pas2js/httpcompiler.pp

@@ -12,7 +12,7 @@ uses
   {$ENDIF}
   sysutils, classes, fpjson, contnrs, syncobjs, fpmimetypes, custhttpapp, inifiles,
   fpwebproxy, webutil, fpwebfile, httproute, httpdefs, dirwatch, Pas2JSFSCompiler,
-  Pas2JSCompilerCfg, ssockets;
+  Pas2JSCompilerCfg, ssockets, fpdebugcapturesvc;
 
 Const
   HTTPCompilerVersion = '1.0';
@@ -93,8 +93,6 @@ Type
 
   THTTPCompilerApplication = Class(TCustomHTTPApplication)
   private
-    FCaptureFileName : String;
-    FCaptureStream : TFileStream;
     FAPI: String;
     FBaseDir: String;
     FConfigFile: String;
@@ -119,11 +117,7 @@ Type
     procedure DoEcho(ARequest: TRequest; AResponse: TResponse);
     procedure DoProxyLog(Sender: TObject; const aMethod, aLocation, aFromURL, aToURL: String);
     procedure Doquit(ARequest: TRequest; AResponse: TResponse);
-    procedure DoCapture(ARequest: TRequest; AResponse: TResponse);
-    function GetCaptureJSON(ARequest: TRequest; AResponse: TResponse; var aJSON: TJSONData): TJSONArray;
-    procedure SetupCapture(const aFileName: string);
-    procedure ShowCaptureOutput(aJSON: TJSONData);
-
+    procedure SetupCapture;
     function HandleCompileOptions(aDir: String): Boolean;
     function ProcessOptions: Boolean;
     procedure ReadConfigFile(const ConfigFile: string);
@@ -698,7 +692,7 @@ Const
 
 Var
   L : TStringList;
-  P,U : String;
+  C,P,U : String;
   I : Integer;
 
 begin
@@ -723,9 +717,11 @@ begin
       FCrossOriginIsolation:=ReadBool(SConfig,KeyCOI,FCrossOriginIsolation);
       if ValueExists(SConfig,KeyCapture) then
         begin
-        FCaptureFileName:=ReadString(SConfig,keyCapture,'');
-        if FCaptureFileName='' then
-          FCaptureFileName:='-';
+        C:=ReadString(SConfig,keyCapture,'');
+        if C='-' then
+          TDebugCaptureService.Instance.LogToConsole:=True
+        else
+          TDebugCaptureService.Instance.LogFileName:=C;
         end;
       L:=TstringList.Create;
       ReadSectionValues(SProxy,L,[]);
@@ -753,7 +749,7 @@ end;
 function THTTPCompilerApplication.ProcessOptions: Boolean;
 
 Var
-  IndexPage,D : String;
+  C,IndexPage,D : String;
 
 begin
   Result:=False;
@@ -805,9 +801,11 @@ begin
   FCrossOriginIsolation:=hasOption('o','coi');
   if HasOption('u','capture') then
     begin
-    FCaptureFileName:=GetOptionValue('u','capture');
-    if FCaptureFileName='' then
-      FCaptureFileName:='-';
+    C:=GetOptionValue('u','capture');
+    if C='' then
+      TDebugCaptureService.Instance.LogToConsole:=True
+    else
+      TDebugCaptureService.Instance.LogFileName:=C;
     end;
   Result:=True;
 end;
@@ -849,8 +847,7 @@ begin
 {$endif}
     end;
   // Handle options
-  if FCaptureFileName<>'' then
-    SetupCapture(FCaptureFileName);
+  SetupCapture;
   if FPassword<>'' then
     HTTPRouter.RegisterRoute('/quit',rmAll,@Doquit,False);
   if FEcho  then
@@ -892,97 +889,23 @@ begin
   end;
 end;
 
-function THTTPCompilerApplication.GetCaptureJSON(ARequest: TRequest;
-  AResponse: TResponse; var aJSON: TJSONData): TJSONArray;
-
-var
-  aJSONObj : TJSONObject absolute aJSON;
-  Cont : String;
-
-begin
-  Result:=Nil;
-  aJSON:=Nil;
-  try
-    Cont:=aRequest.Content;
-    aJSON:=GetJSON(Cont);
-    if aJSON.JSONType<>jtObject then
-      Raise EHTTP.Create('No JSON object in capture JSON');
-    Result:=aJSONObj.Get('lines',TJSONArray(Nil));
-    if Result=Nil then
-      begin
-      FreeAndNil(aJSON);
-      Raise EHTTP.Create('No lines element in capture JSON');
-      end;
-  except
-    On E : Exception do
-      begin
-      DoLog(etError,Format('Exception %s (%s) : Invalid capture content: not valid JSON: %s',[E.ClassName,E.Message,Copy(Cont,1,255)]));
-      aResponse.Code:=400;
-      aResponse.CodeText:='INVALID PARAM';
-      aResponse.SendResponse;
-      end;
-  end;
-end;
-
-procedure THTTPCompilerApplication.ShowCaptureOutput(aJSON : TJSONData);
-
-var
-  S : TJSONStringType;
-
-begin
-  if aJSON.JSONType in StructuredJSONTypes then
-    S:=aJSON.AsJSON
-  else
-    S:=aJSON.AsString;
-  if Assigned(FCaptureStream) then
-    begin
-    S:=S+sLineBreak;
-    FCaptureStream.WriteBuffer(S[1],Length(S)*SizeOf(TJSONCharType));
-    end
-  else
-    DoLog(etInfo,'Capture : '+S);
-end;
-
-procedure THTTPCompilerApplication.DoCapture(ARequest: TRequest; AResponse: TResponse);
 
-Var
-  aJSON : TJSONData;
-  aArray : TJSONArray;
-  I : Integer;
-
-begin
-  aJSON:=Nil;
-  aArray:=Nil;
-  try
-    aArray:=GetCaptureJSON(aRequest,aResponse,aJSON);
-    if aArray<>Nil then
-      begin
-      For I:=0 to aArray.Count-1 do
-        ShowCaptureOutput(aArray[i]);
-      aResponse.Code:=200;
-      aResponse.CodeText:='OK';
-      aResponse.SendResponse;
-      end;
-  finally
-    aJSON.Free;
-  end;
-end;
-
-procedure THTTPCompilerApplication.SetupCapture(Const aFileName : string);
+procedure THTTPCompilerApplication.SetupCapture;
 
 Var
- Dest : String;
+  Dest : String;
+  Svc : TDebugCaptureService;
 
 begin
-  if (aFileName<>'') and (aFileName<>'-') then
+  Svc:=TDebugCaptureService.Instance;
+  Dest:=Svc.LogFileName;
+  if (Dest='') and Svc.LogToConsole then
+    Dest:='Console';
+  if Dest<>'' then
     begin
-    FCaptureStream:=TFileStream.Create(aFileName,fmCreate);
-    Dest:='file: '+aFileName
-    end
-  else
-    Dest:='console';
-  DoLog(etInfo,Format('Setting up capture on route "%s", writing to %s',[SCaptureRoute,Dest]));
-  HTTPRouter.RegisterRoute(SCaptureRoute,rmPost,@DoCapture,False);
+    DoLog(etInfo,Format('Setting up capture on route "%s", writing to %s',[SCaptureRoute,Dest]));
+    HTTPRouter.RegisterRoute(SCaptureRoute,rmPost,@Svc.HandleRequest,False);
+    end;
 end;
 
 end.