Forum Discussion

NidhiMangtani's avatar
NidhiMangtani
Contributor III
3 years ago

Automating Application Back up

Hi All,

Is there any utility rule available which helps to take backup of all the components of the application? This can then be scheduled to take daily/weekly application back ups. 

Any leads would be appreciated.

 

  • Hi Bharti,

     

    Here is an Extensibility rule to extract the application (the same as Application zip file option).

     

    Imports System
    Imports System.Data
    Imports System.Data.Common
    Imports System.IO
    Imports System.Collections.Generic
    Imports System.Globalization
    Imports System.Linq
    Imports Microsoft.VisualBasic
    Imports System.Windows.Forms
    Imports OneStream.Shared.Common
    Imports OneStream.Shared.Wcf
    Imports OneStream.Shared.Engine
    Imports OneStream.Shared.Database
    Imports OneStream.Stage.Engine
    Imports OneStream.Stage.Database
    Imports OneStream.Finance.Engine
    Imports OneStream.Finance.Database

    Namespace OneStream.BusinessRule.Extender.XFR_ExportAppMetadata
    Public Class MainClass
    '------------------------------------------------------------------------------------------------------------
    'Reference Code: XFR_ExportAppMetadata
    '
    'Description: Extender buiness rule that all application metadata to a zip file for the current application.
    ' The files are written to the application Data Mgmt Export folder in the file share directory.
    '
    'Usage: Can be executed from Business Rule editor or run as part of a Data Management sequence.
    '
    'Created By: Inlumi - Peter Fu
    'Date Created: 7-2-2022
    '------------------------------------------------------------------------------------------------------------
    Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As ExtenderArgs) As Object
    Try
    Select Case args.FunctionType
    Case Is = ExtenderFunctionType.Unknown, ExtenderFunctionType.ExecuteDataMgmtBusinessRuleStep
    'Prepare the Stage Data Extract File path
    Dim configSettings as AppServerConfigSettings = AppServerConfig.GetSettings(si)
    Dim folderPath as String = FileShareFolderHelper.GetDataManagementExportUsernameFolderForApp(si, True, configSettings.FileShareRootFolder, si.AppToken.AppName) & "\" & DateTime.UtcNow.ToString("yyyyMMdd") & "\MetadataExtracts"
    if Not Directory.Exists(folderPath) then Directory.CreateDirectory(folderPath)
    Dim filePath as String = folderPath & "\" & DateTime.UtcNow.ToString("yyyyMMdd") & " " & si.AppToken.AppName & ".zip"
    If File.Exists(filePath) Then File.Delete(filePath)

    'Set the extract options
    Dim xmlOptions as New XmlExtractOptions
    xmlOptions.ExtractAllItems = True

    'Execute the Metadata Extract
    Using dbConnFW as DBConnInfo = BRAPi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp as DBConnInfo = BRAPi.Database.CreateApplicationDbConnInfo(si)
    Dim zipBytes as Byte() = ApplicationZipFileHelper.Extract(dbConnFW, dbConnApp, Nothing, xmlOptions)
    'Append the contents of this workflow profile to the extract file
    Using FS As New FileStream(filePath, FileMode.Append, FileAccess.Write)
    'Create a binary writer, and write all bytes to the FileStream at once
    Using BW As New BinaryWriter(FS)
    BW.Write(zipBytes)
    End Using
    End Using
    End Using
    End Using

    End Select

    Return Nothing
    Catch ex As Exception
    Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
    End Try
    End Function
    End Class
    End Namespace

     

    Peter

  • PeterFu's avatar
    PeterFu
    Contributor II

    Hi Bharti,

     

    Here is an Extensibility rule to extract the application (the same as Application zip file option).

     

    Imports System
    Imports System.Data
    Imports System.Data.Common
    Imports System.IO
    Imports System.Collections.Generic
    Imports System.Globalization
    Imports System.Linq
    Imports Microsoft.VisualBasic
    Imports System.Windows.Forms
    Imports OneStream.Shared.Common
    Imports OneStream.Shared.Wcf
    Imports OneStream.Shared.Engine
    Imports OneStream.Shared.Database
    Imports OneStream.Stage.Engine
    Imports OneStream.Stage.Database
    Imports OneStream.Finance.Engine
    Imports OneStream.Finance.Database

    Namespace OneStream.BusinessRule.Extender.XFR_ExportAppMetadata
    Public Class MainClass
    '------------------------------------------------------------------------------------------------------------
    'Reference Code: XFR_ExportAppMetadata
    '
    'Description: Extender buiness rule that all application metadata to a zip file for the current application.
    ' The files are written to the application Data Mgmt Export folder in the file share directory.
    '
    'Usage: Can be executed from Business Rule editor or run as part of a Data Management sequence.
    '
    'Created By: Inlumi - Peter Fu
    'Date Created: 7-2-2022
    '------------------------------------------------------------------------------------------------------------
    Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As ExtenderArgs) As Object
    Try
    Select Case args.FunctionType
    Case Is = ExtenderFunctionType.Unknown, ExtenderFunctionType.ExecuteDataMgmtBusinessRuleStep
    'Prepare the Stage Data Extract File path
    Dim configSettings as AppServerConfigSettings = AppServerConfig.GetSettings(si)
    Dim folderPath as String = FileShareFolderHelper.GetDataManagementExportUsernameFolderForApp(si, True, configSettings.FileShareRootFolder, si.AppToken.AppName) & "\" & DateTime.UtcNow.ToString("yyyyMMdd") & "\MetadataExtracts"
    if Not Directory.Exists(folderPath) then Directory.CreateDirectory(folderPath)
    Dim filePath as String = folderPath & "\" & DateTime.UtcNow.ToString("yyyyMMdd") & " " & si.AppToken.AppName & ".zip"
    If File.Exists(filePath) Then File.Delete(filePath)

    'Set the extract options
    Dim xmlOptions as New XmlExtractOptions
    xmlOptions.ExtractAllItems = True

    'Execute the Metadata Extract
    Using dbConnFW as DBConnInfo = BRAPi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp as DBConnInfo = BRAPi.Database.CreateApplicationDbConnInfo(si)
    Dim zipBytes as Byte() = ApplicationZipFileHelper.Extract(dbConnFW, dbConnApp, Nothing, xmlOptions)
    'Append the contents of this workflow profile to the extract file
    Using FS As New FileStream(filePath, FileMode.Append, FileAccess.Write)
    'Create a binary writer, and write all bytes to the FileStream at once
    Using BW As New BinaryWriter(FS)
    BW.Write(zipBytes)
    End Using
    End Using
    End Using
    End Using

    End Select

    Return Nothing
    Catch ex As Exception
    Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
    End Try
    End Function
    End Class
    End Namespace

     

    Peter

    • NidhiMangtani's avatar
      NidhiMangtani
      Contributor III

      Hi Peter,

      This rule works, I am not able to understand the exported content though. 

      When we take a manual backup of the application, we can see the XMLs individually as shown below:

      The export from this rule is a .zip.xml file which is taking longer to open and on opening I see some encrypted text. Just want to ensure that .zip.xml can be used to restore application if needed. Would you please explain how to read this .zip.xml file?

       

       

    • NidhiMangtani's avatar
      NidhiMangtani
      Contributor III

      Ok, I somehow managed to save the extract as a zip folder, then it shows 8 XMLs internally. The manual backup has 16 XMLs.

      Can we mitigate this difference somehow?

      • PeterFu's avatar
        PeterFu
        Contributor II

        Hi,

         

        Maybe you used the wrong button to download. See print screens

         

         

         

        Peter

  • NicolasArgente's avatar
    NicolasArgente
    Valued Contributor

    To add up to what Peter Provided, you would use this extensibility rule and link it to a data management job. Then your task scheduler would call the data management job on daily/weekly/hourly basis... and job done 🙂