Skip to content
Snippets Groups Projects
Select Git revision
  • aef42a773666470cca577671d24a5eb09ffb2248
  • master default protected
  • dev protected
  • Issue/3130-onboardingUzK
  • Issue/3109-onboarding
  • Issue/2915-migrateSql2Linked
  • test_ci
  • Issue/xxxx-fixDevcontainer
  • Issue/xxxx-generateLatestTag
  • Issue/2980-fixContainerBuild
  • Issue/2967-fixGD
  • Issue/2944-gdShenanigans
  • Issue/2906-containerCron
  • Issue/2880-gd
  • petar.hristov-master-patch-9e49
  • Issue/2668-graphDeployer
  • gitkeep
  • Hotfix/xxxx-fastDeployment
  • Hotfix/2615-graphDeployerLag
  • Issue/2568-betterLogging
  • Issue/2518-docs
  • v2.1.11
  • v2.1.10
  • v2.1.9
  • v2.1.8
  • v2.1.7
  • v2.1.6
  • v2.1.5
  • v2.1.4
  • v2.1.3
  • v2.1.2
  • v2.1.1
  • v2.1.0
  • v2.0.1
  • v2.0.0
  • v1.2.11
  • v1.2.10
  • v1.2.9
  • v1.2.8
  • v1.2.7
  • v1.2.6
41 results

Program.cs

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Program.cs 5.32 KiB
    using Coscine.Configuration;
    using Coscine.Metadata;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.IO;
    using System.Linq;
    using VDS.RDF;
    using VDS.RDF.Storage;
    
    namespace Coscine.GraphDeployer
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                var configuration = new ConsulConfiguration();
    
                var virtuosoServer = configuration.GetString("coscine/local/virtuoso/additional/url");
                var virtuosoHost = new Uri(virtuosoServer).Host;
                var virtuosoUser = configuration.GetString("coscine/global/virtuoso_db_user");
                var virtuosoPassword = configuration.GetString("coscine/global/virtuoso_db_password");
    
                VirtuosoManager virtuosoManager = new VirtuosoManager($"Server={virtuosoHost};Uid={virtuosoUser};pwd={virtuosoPassword}");
    
                var _util = new Util(virtuosoServer);
                var folder = "/voc";
                var virtuosoISQLLocation = configuration.GetString(
                    "coscine/local/virtuoso/isql",
                    "C:/Programs/Virtuoso/bin/isql.exe"
                );
    
                var graphKeys = configuration.Keys("coscine/local/graphs/");
    
                graphKeys = graphKeys.Where((entry) => entry.Contains("repositoryurl"))
                                        .Select((entry) => entry.Substring(0, entry.LastIndexOf("/") + 1))
                                        .ToArray();
    
                foreach (var graphKey in graphKeys)
                {
                    // Example: {gitHost}/{groupName}/{repository}.git
                    var repositoryUrl = configuration.GetString(graphKey + "repositoryurl");
    
                    Console.WriteLine("Working with: " + repositoryUrl);
    
                    var branch = configuration.GetString(graphKey + "branch", "master");
    
                    var repositoryFolder = repositoryUrl.Substring(0, repositoryUrl.LastIndexOf("."));
                    repositoryFolder = repositoryFolder.Substring(repositoryFolder.LastIndexOf("/") + 1);
    
                    ExecuteCommand(
                        "powershell.exe",
                        $@"& '{ Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "getRepository.ps1") }' "
                        + $"'{repositoryUrl}' '{branch}' '{repositoryFolder}'"
                    );
    
                    var queries = new List<string>();
                    foreach (var file in GetFiles(folder).Where((file) => file.Contains(".ttl")))
                    {
                        var fileInfo = new FileInfo(file);
                        var graph = new Graph();
                        graph.LoadFromFile(file);
                        var graphName = graph.BaseUri.ToString();
    
                        if (_util.HasGraph(graphName))
                        {
                            Console.WriteLine($"Clearing {graphName}");
                            _util.ClearGraph(graphName);
                        }
    
                        queries.Add($"ld_dir('{fileInfo.DirectoryName.Substring(2).Replace("\\", "/")}', '{fileInfo.Name}', '{graphName}');");
                    }
                    queries.Add($"rdf_loader_run ();");
                    queries.Add($"DELETE from DB.DBA.load_list where 1=1;");
    
                    foreach (var query in queries)
                    {
                        ExecuteCommand(
                            "powershell.exe",
                            $"\"\\\"{query}\\\" | {virtuosoISQLLocation}\""
                        );
                    }
                }
    
                Console.WriteLine("Done");
            }
    
            private static void ExecuteCommand(string fileName, string arguments)
            {
                ProcessStartInfo startInfo = new ProcessStartInfo
                {
                    FileName = fileName,
                    Arguments = arguments,
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    UseShellExecute = false,
                    CreateNoWindow = true,
                };
                using (var process = new Process
                {
                    StartInfo = startInfo
                })
                {
                    process.Start();
    
                    string output = process.StandardOutput.ReadToEnd();
                    Console.WriteLine(output);
    
                    string errors = process.StandardError.ReadToEnd();
                    Console.WriteLine(errors);
                }
            }
    
    
            private static IEnumerable<string> GetFiles(string path)
            {
                Queue<string> queue = new Queue<string>();
                queue.Enqueue(path);
                while (queue.Count > 0)
                {
                    path = queue.Dequeue();
                    try
                    {
                        foreach (string subDir in Directory.GetDirectories(path))
                        {
                            queue.Enqueue(subDir);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.Error.WriteLine(ex);
                    }
                    string[] files = null;
                    try
                    {
                        files = Directory.GetFiles(path);
                    }
                    catch (Exception ex)
                    {
                        Console.Error.WriteLine(ex);
                    }
                    if (files != null)
                    {
                        for (int i = 0; i < files.Length; i++)
                        {
                            yield return files[i];
                        }
                    }
                }
            }
        }
    }