mirror of
https://github.com/grafana/grafana.git
synced 2026-08-18 17:15:08 -05:00
Export: support stopping exports (#51769)
This commit is contained in:
@@ -29,6 +29,7 @@ type gitExportJob struct {
|
||||
status ExportStatus
|
||||
cfg ExportConfig
|
||||
broadcaster statusBroadcaster
|
||||
helper *commitHelper
|
||||
}
|
||||
|
||||
type simpleExporter = func(helper *commitHelper, job *gitExportJob) error
|
||||
@@ -69,6 +70,10 @@ func (e *gitExportJob) getConfig() ExportConfig {
|
||||
return e.cfg
|
||||
}
|
||||
|
||||
func (e *gitExportJob) requestStop() {
|
||||
e.helper.stopRequested = true // will error on the next write
|
||||
}
|
||||
|
||||
// Utility function to export dashboards
|
||||
func (e *gitExportJob) start() {
|
||||
defer func() {
|
||||
@@ -119,16 +124,21 @@ func (e *gitExportJob) doExportWithHistory() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
helper := &commitHelper{
|
||||
e.helper = &commitHelper{
|
||||
repo: r,
|
||||
work: w,
|
||||
ctx: context.Background(),
|
||||
workDir: e.rootDir,
|
||||
orgDir: e.rootDir,
|
||||
broadcast: func(p string) {
|
||||
e.status.Last = p[len(e.rootDir):]
|
||||
e.status.Changed = time.Now().UnixMilli()
|
||||
e.broadcaster(e.status)
|
||||
},
|
||||
}
|
||||
|
||||
cmd := &models.SearchOrgsQuery{}
|
||||
err = e.sql.SearchOrgs(helper.ctx, cmd)
|
||||
err = e.sql.SearchOrgs(e.helper.ctx, cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -136,14 +146,14 @@ func (e *gitExportJob) doExportWithHistory() error {
|
||||
// Export each org
|
||||
for _, org := range cmd.Result {
|
||||
if len(cmd.Result) > 1 {
|
||||
helper.orgDir = path.Join(e.rootDir, fmt.Sprintf("org_%d", org.Id))
|
||||
e.helper.orgDir = path.Join(e.rootDir, fmt.Sprintf("org_%d", org.Id))
|
||||
}
|
||||
err = helper.initOrg(e.sql, org.Id)
|
||||
err = e.helper.initOrg(e.sql, org.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = e.doOrgExportWithHistory(helper)
|
||||
err = e.doOrgExportWithHistory(e.helper)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -161,29 +171,38 @@ func (e *gitExportJob) doExportWithHistory() error {
|
||||
}
|
||||
|
||||
func (e *gitExportJob) doOrgExportWithHistory(helper *commitHelper) error {
|
||||
lookup, err := exportDataSources(helper, e)
|
||||
include := e.cfg.Include
|
||||
lookup, err := exportDataSources(helper, e, include.DS)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if true {
|
||||
if include.Dash {
|
||||
err = exportDashboards(helper, e, lookup)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Run all the simple exporters
|
||||
exporters := []simpleExporter{
|
||||
dumpAuthTables,
|
||||
exportSystemPreferences,
|
||||
exportSystemStars,
|
||||
exportSystemPlaylists,
|
||||
exportAnnotations,
|
||||
exporters := []simpleExporter{}
|
||||
if include.Auth {
|
||||
exporters = append(exporters, dumpAuthTables)
|
||||
}
|
||||
|
||||
// This needs a real admin user to use the interfaces (and decrypt)
|
||||
if false {
|
||||
if include.Services {
|
||||
exporters = append(exporters, exportFiles,
|
||||
exportSystemPreferences,
|
||||
exportSystemStars,
|
||||
exportSystemPlaylists,
|
||||
exportKVStore,
|
||||
exportLive)
|
||||
}
|
||||
|
||||
if include.Anno {
|
||||
exporters = append(exporters, exportAnnotations)
|
||||
}
|
||||
|
||||
if include.Snapshots {
|
||||
exporters = append(exporters, exportSnapshots)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user