Exemplo n.º 1
0
        /// <summary>
        /// Downloads the configuration database.
        /// </summary>
        private void DownloadBase()
        {
            transferControl.ThrowIfCancellationRequested();
            transferControl.WriteLine();
            transferControl.WriteMessage(AdminPhrases.DownloadBase);

            GetTempFileName(out string tempFileName, out string extractDir);
            agentClient.DownloadConfig(tempFileName, TopFolder.Base);
            ExtractArchive(tempFileName, extractDir, false);

            foreach (IBaseTable baseTable in project.ConfigDatabase.AllTables)
            {
                transferControl.ThrowIfCancellationRequested();
                transferControl.WriteMessage(string.Format(ExtensionPhrases.ImportTable, baseTable.Name));
                string datFileName = Path.Combine(extractDir, "BaseDAT", baseTable.FileNameDat);

                if (File.Exists(datFileName))
                {
                    BaseTableAdapter baseAdapter = new() { FileName = datFileName };
                    IBaseTable       srcTable    = BaseTableFactory.GetBaseTable(baseTable);
                    baseAdapter.Fill(srcTable);
                    baseTable.Modified = true;

                    foreach (object item in srcTable.EnumerateItems())
                    {
                        baseTable.AddObject(item);
                    }
                }
            }

            progressTracker.TaskIndex++;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Sends the command to the service.
        /// </summary>
        private void ControlService(ServiceApp serviceApp, ServiceCommand cmd)
        {
            string cmdFormat = cmd switch
            {
                ServiceCommand.Start => AdminPhrases.StartNamedService,
                ServiceCommand.Stop => AdminPhrases.StopNamedService,
                ServiceCommand.Restart => AdminPhrases.RestartNamedService,
                _ => throw new ScadaException("Unknown service control command.")
            };

            transferControl.ThrowIfCancellationRequested();
            transferControl.WriteMessage(string.Format(cmdFormat, ScadaUtils.GetAppName(serviceApp)));

            if (agentClient.ControlService(serviceApp, cmd, ProcessTimeout))
            {
                transferControl.WriteMessage(AdminPhrases.ServiceCommandCompleted);
            }
            else
            {
                transferControl.WriteError(AdminPhrases.ServiceCommandFailed);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Downloads the configuration database.
        /// </summary>
        private void DownloadBase()
        {
            transferControl.ThrowIfCancellationRequested();
            transferControl.WriteLine();
            transferControl.WriteMessage(AdminPhrases.DownloadBase);
            progressTracker.SubtaskCount = project.ConfigDatabase.AllTables.Length;

            foreach (IBaseTable baseTable in project.ConfigDatabase.AllTables)
            {
                transferControl.ThrowIfCancellationRequested();
                transferControl.WriteMessage(string.Format(ExtensionPhrases.DownloadTable, baseTable.Name));
                ReadBaseTable(baseTable, conn);
                progressTracker.SubtaskIndex++;
            }

            progressTracker.TaskIndex++;
        }
Exemplo n.º 4
0
        /// <summary>
        /// Creates a database schema.
        /// </summary>
        private void CreateSchema()
        {
            transferControl.ThrowIfCancellationRequested();
            transferControl.WriteMessage(ExtensionPhrases.CreateSchema);

            string sql = "CREATE SCHEMA IF NOT EXISTS " + Schema;

            new NpgsqlCommand(sql, conn).ExecuteNonQuery();
            progressTracker.TaskIndex++;
        }
Exemplo n.º 5
0
        /// <summary>
        /// Compresses the configuration into the specified file.
        /// </summary>
        private void CompressConfig(string destFileName)
        {
            transferControl.ThrowIfCancellationRequested();
            transferControl.WriteLine();
            transferControl.WriteMessage(ExtensionPhrases.CompressConfig);

            // archive path separator is '/'
            FileStream fileStream = null;
            ZipArchive zipArchive = null;

            try
            {
                fileStream = new FileStream(destFileName, FileMode.Create, FileAccess.Write, FileShare.Read);
                zipArchive = new ZipArchive(fileStream, ZipArchiveMode.Create);

                bool ignoreRegKeys = uploadOptions.IgnoreRegKeys;
                bool filterByObj   = uploadOptions.ObjectFilter.Count > 0;

                // archive the configuration database
                if (uploadOptions.IncludeBase)
                {
                    transferControl.ThrowIfCancellationRequested();
                    transferControl.WriteMessage(ExtensionPhrases.CompressBase);

                    foreach (IBaseTable srcTable in project.ConfigDatabase.AllTables)
                    {
                        transferControl.ThrowIfCancellationRequested();

                        // filter source table by objects if needed
                        IBaseTable baseTable = srcTable;

                        if (filterByObj)
                        {
                            if (srcTable.ItemType == typeof(Cnl))
                            {
                                baseTable = GetFilteredTable <Cnl>(srcTable, uploadOptions.ObjectFilter);
                            }
                            else if (srcTable.ItemType == typeof(View))
                            {
                                baseTable = GetFilteredTable <View>(srcTable, uploadOptions.ObjectFilter);
                            }
                        }

                        // convert table to DAT format
                        using Stream entryStream =
                                  zipArchive.CreateEntry("BaseDAT/" + srcTable.FileNameDat, CompressionLevel.Fastest).Open();
                        BaseTableAdapter baseAdapter = new() { Stream = entryStream };
                        baseAdapter.Update(baseTable);
                    }
                }

                // archive views
                if (uploadOptions.IncludeView)
                {
                    transferControl.ThrowIfCancellationRequested();
                    transferControl.WriteMessage(ExtensionPhrases.CompressViews);

                    if (filterByObj)
                    {
                        PackFiles(zipArchive, project.Views.ViewDir, GetFilteredViews(project.ConfigDatabase.ViewTable,
                                                                                      project.Views.ViewDir, uploadOptions.ObjectFilter), "Views/");
                    }
                    else
                    {
                        PackDirectory(zipArchive, project.Views.ViewDir, "Views/", ignoreRegKeys);
                    }
                }

                // archive Server configuration
                if (uploadOptions.IncludeServer && instance.ServerApp.Enabled)
                {
                    transferControl.ThrowIfCancellationRequested();
                    transferControl.WriteMessage(string.Format(ExtensionPhrases.CompressAppConfig,
                                                               CommonPhrases.ServerAppName));
                    PackDirectory(zipArchive, instance.ServerApp.AppDir, "ScadaServer/", ignoreRegKeys);
                }

                // archive Communicator configuration
                if (uploadOptions.IncludeComm && instance.CommApp.Enabled)
                {
                    transferControl.ThrowIfCancellationRequested();
                    transferControl.WriteMessage(string.Format(ExtensionPhrases.CompressAppConfig,
                                                               CommonPhrases.CommAppName));
                    PackDirectory(zipArchive, instance.CommApp.AppDir, "ScadaComm/", ignoreRegKeys);
                }

                // archive Webstation configuration
                if (uploadOptions.IncludeWeb && instance.WebApp.Enabled)
                {
                    transferControl.ThrowIfCancellationRequested();
                    transferControl.WriteMessage(string.Format(ExtensionPhrases.CompressAppConfig,
                                                               CommonPhrases.WebAppName));
                    PackDirectory(zipArchive, instance.WebApp.AppDir, "ScadaWeb/", ignoreRegKeys);
                }

                // add project information
                transferControl.ThrowIfCancellationRequested();
                transferControl.WriteMessage(ExtensionPhrases.AddProjectInfo);

                using (Stream entryStream =
                           zipArchive.CreateEntry(AgentConst.ProjectInfoEntry, CompressionLevel.Fastest).Open())
                {
                    using StreamWriter writer = new(entryStream, Encoding.UTF8);
                    writer.Write(project.GetInfo());
                }

                // add transfer options
                transferControl.ThrowIfCancellationRequested();
                transferControl.WriteMessage(ExtensionPhrases.AddTransferOptions);

                using (Stream entryStream =
                           zipArchive.CreateEntry(AgentConst.UploadOptionsEntry, CompressionLevel.Fastest).Open())
                {
                    uploadOptions.Save(entryStream);
                }

                progressTracker.TaskIndex++;
            }
            finally
            {
                zipArchive?.Dispose();
                fileStream?.Dispose();
            }
        }