Export raw bundles with collection logs and parser field snapshot
This commit is contained in:
@@ -70,7 +70,22 @@ func (s *Server) handleUpload(w http.ResponseWriter, r *http.Request) {
|
||||
vendor string
|
||||
)
|
||||
|
||||
if looksLikeJSONSnapshot(header.Filename, payload) {
|
||||
if rawPkg, ok, err := parseRawExportBundle(payload); err != nil {
|
||||
jsonError(w, "Failed to parse raw export bundle: "+err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
} else if ok {
|
||||
replayed, replayVendor, replayErr := s.reanalyzeRawExportPackage(rawPkg)
|
||||
if replayErr != nil {
|
||||
jsonError(w, "Failed to reanalyze raw export package: "+replayErr.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
result = replayed
|
||||
vendor = replayVendor
|
||||
if strings.TrimSpace(vendor) == "" {
|
||||
vendor = "snapshot"
|
||||
}
|
||||
s.SetRawExport(rawPkg)
|
||||
} else if looksLikeJSONSnapshot(header.Filename, payload) {
|
||||
if rawPkg, ok, err := parseRawExportPackage(payload); err != nil {
|
||||
jsonError(w, "Failed to parse raw export package: "+err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
@@ -755,20 +770,20 @@ func (s *Server) handleExportCSV(w http.ResponseWriter, r *http.Request) {
|
||||
func (s *Server) handleExportJSON(w http.ResponseWriter, r *http.Request) {
|
||||
result := s.GetResult()
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", exportFilename(result, "json")))
|
||||
|
||||
if rawPkg := s.GetRawExport(); rawPkg != nil {
|
||||
rawPkg.ExportedAt = time.Now().UTC()
|
||||
rawPkg.Analysis = nil
|
||||
encoder := json.NewEncoder(w)
|
||||
encoder.SetIndent("", " ")
|
||||
if err := encoder.Encode(rawPkg); err != nil {
|
||||
bundle, err := buildRawExportBundle(rawPkg, result, s.ClientVersionString())
|
||||
if err != nil {
|
||||
jsonError(w, "Failed to build raw export bundle: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/zip")
|
||||
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", exportFilename(result, "zip")))
|
||||
_, _ = w.Write(bundle)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", exportFilename(result, "json")))
|
||||
exp := exporter.New(result)
|
||||
_ = exp.ExportJSON(w)
|
||||
}
|
||||
@@ -840,6 +855,7 @@ func (s *Server) handleCollectStart(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
job := s.jobManager.CreateJob(req)
|
||||
s.jobManager.AppendJobLog(job.ID, "Клиент: "+s.ClientVersionString())
|
||||
s.startCollectionJob(job.ID, req)
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
Reference in New Issue
Block a user