@@ -3,6 +3,7 @@ package v2
3
3
import (
4
4
"archive/tar"
5
5
"compress/gzip"
6
+ "context"
6
7
"encoding/json"
7
8
"errors"
8
9
"fmt"
@@ -20,6 +21,7 @@ import (
20
21
"syscall"
21
22
"time"
22
23
24
+ usql "github.com/actiontech/dtle/driver/mysql/sql"
23
25
nomadApi "github.com/hashicorp/nomad/api"
24
26
"github.com/hashicorp/nomad/nomad/structs"
25
27
"github.com/labstack/echo/v4"
@@ -29,6 +31,7 @@ import (
29
31
"github.com/actiontech/dtle/driver/common"
30
32
"github.com/actiontech/dtle/driver/kafka"
31
33
mysql "github.com/actiontech/dtle/driver/mysql"
34
+ "github.com/actiontech/dtle/driver/mysql/mysqlconfig"
32
35
"github.com/actiontech/dtle/g"
33
36
)
34
37
@@ -2162,6 +2165,14 @@ func DiagnosisJobAndTarFile(logger g.LoggerType, jobId, src, dst string) (err er
2162
2165
tw := tar .NewWriter (gw )
2163
2166
defer tw .Close ()
2164
2167
2168
+ // schema and table info
2169
+ jobSchemasName := path .Join (src , "dtle-" + jobId + "-schemas" )
2170
+ err = createSchemaInfoFile (logger , jobId , jobSchemasName )
2171
+ if err != nil {
2172
+ return err
2173
+ }
2174
+ defer os .Remove (jobSchemasName )
2175
+
2165
2176
// create job info file for tar
2166
2177
jobInfoFileName := path .Join (src , "dtle-" + jobId + "-info" )
2167
2178
err = createJobInfoFile (logger , jobId , jobInfoFileName )
@@ -2194,7 +2205,7 @@ func DiagnosisJobAndTarFile(logger g.LoggerType, jobId, src, dst string) (err er
2194
2205
if err != nil {
2195
2206
return err
2196
2207
}
2197
- hdr .Name = strings . TrimPrefix ( filePath , string ( filepath . Separator ) )
2208
+ hdr .Name = path . Join ( "dump" , hdr . Name )
2198
2209
2199
2210
if err := tw .WriteHeader (hdr ); err != nil {
2200
2211
return err
@@ -2262,7 +2273,7 @@ func recordProcessStatus(logger g.LoggerType, w io.Writer) error {
2262
2273
}
2263
2274
2264
2275
func createJobInfoFile (logger g.LoggerType , jobId , fileName string ) error {
2265
- logger .Info ("create job %v info file" , jobId )
2276
+ logger .Info ("create job info file" , "jobId " , jobId )
2266
2277
f , err := os .OpenFile (fileName , os .O_WRONLY | os .O_TRUNC | os .O_CREATE , 0640 )
2267
2278
if nil != err {
2268
2279
return fmt .Errorf ("capture job info error(%v)" , err )
@@ -2273,7 +2284,6 @@ func createJobInfoFile(logger g.LoggerType, jobId, fileName string) error {
2273
2284
if err != nil {
2274
2285
return fmt .Errorf ("get job detail failed" )
2275
2286
}
2276
-
2277
2287
jobByts , err := json .Marshal (jobInfo )
2278
2288
if err != nil {
2279
2289
return err
@@ -2291,3 +2301,58 @@ func createJobInfoFile(logger g.LoggerType, jobId, fileName string) error {
2291
2301
}
2292
2302
return nil
2293
2303
}
2304
+ func createSchemaInfoFile (logger g.LoggerType , jobId , fileName string ) error {
2305
+ logger .Info ("create job schema file" , "jobId" , jobId )
2306
+ f , err := os .OpenFile (fileName , os .O_WRONLY | os .O_TRUNC | os .O_CREATE , 0640 )
2307
+ if nil != err {
2308
+ return fmt .Errorf ("capture job info error(%v)" , err )
2309
+ }
2310
+ defer f .Close ()
2311
+ var fileInfo []byte
2312
+ // get job detail
2313
+ resp , err := getJobDetail (logger , jobId , GetJobTypeFromJobId (jobId ))
2314
+ if err != nil {
2315
+ return err
2316
+ }
2317
+ connectionConfig := mysqlconfig.ConnectionConfig {
2318
+ Host : resp .BasicTaskProfile .ConnectionInfo .SrcDataBase .Host ,
2319
+ Port : resp .BasicTaskProfile .ConnectionInfo .SrcDataBase .Port ,
2320
+ Password : resp .BasicTaskProfile .ConnectionInfo .SrcDataBase .Password ,
2321
+ User : resp .BasicTaskProfile .ConnectionInfo .SrcDataBase .User ,
2322
+ }
2323
+ db , err := usql .CreateDB (connectionConfig .GetDBUri ())
2324
+ if err != nil {
2325
+ return err
2326
+ }
2327
+
2328
+ // query create db/table sql
2329
+ databases , err := usql .ShowDatabases (db )
2330
+ if err != nil {
2331
+ return err
2332
+ }
2333
+ for _ , database := range databases {
2334
+ fileInfo = append (fileInfo , []byte (" schemaName : " + database + " \n " )... )
2335
+ createSchemas , err := usql .ShowCreateSchema (context .TODO (), db , database )
2336
+ if err != nil {
2337
+ return err
2338
+ }
2339
+ fileInfo = append (fileInfo , []byte (createSchemas + " \n " )... )
2340
+ tables , err := usql .ShowTables (db , database , true )
2341
+ if err != nil {
2342
+ return err
2343
+ }
2344
+ for _ , table := range tables {
2345
+ fileInfo = append (fileInfo , []byte (" tableName : " + table .TableName + " \n " )... )
2346
+ createTable , err := usql .ShowCreateTable (context .TODO (), db , database , table .TableName )
2347
+ if err != nil {
2348
+ return err
2349
+ }
2350
+ fileInfo = append (fileInfo , []byte (createTable + " \n " )... )
2351
+ }
2352
+ }
2353
+ err = os .WriteFile (fileName , fileInfo , 0644 )
2354
+ if err != nil {
2355
+ return fmt .Errorf ("write info to file err: %v" , err )
2356
+ }
2357
+ return nil
2358
+ }
0 commit comments