Example #1
0
        /// <summary>
        /// Get the default database schema compiled from the database.
        /// For a config variable, we fetch a static defined server, database and schema from the application's metadata to show "intellisence".
        /// </summary>
        /// <param name="databaseName">Could be a name like MyDb or a variable like {$KEY{SERVER_VALUE}{DATABASE_VALUE}} OR {$DATABASE_SOURCE{1}{myDb}}.</param>
        /// <param name="parentMetadata">Metadatas</param>
        /// <param name="appMetadata">App metadata</param>
        private static DatabaseMetadata GetDatabaseMetadata(ServerMetadata parentMetadata, AppMetadata appMetadata, string databaseName)
        {
            if (String.IsNullOrEmpty(databaseName))
            {
                throw new ArgumentNullException("databaseName");
            }

            databaseName = databaseName.ToLower();

            //If is a database name
            if (parentMetadata.ContainsKey(databaseName))
            {
                return(parentMetadata[databaseName]);
            }

            //If is a variable
            var v = databaseName.ParseConfigVariable();

            if (v != null &&
                appMetadata.ContainsKey(v.Server) &&
                appMetadata[v.Server].ContainsKey(v.Database))
            {
                return(appMetadata[v.Server][v.Database]);
            }

            throw new ConfigurationException(String.Format("Database not found in the configuration. Name : {0}", databaseName));
        }
Example #2
0
        /*Please use this method for reading the conf file*/
        private void ReadConfigurationFile()
        {
            string      current_dir = System.IO.Directory.GetCurrentDirectory();
            XmlDocument xmlDoc      = new XmlDocument(); //* create an xml document object.

            xmlDoc.Load(_configFile);                    //* load the XML document from the specified file.

            XmlNodeList puppetmasteriplist   = xmlDoc.GetElementsByTagName("PuppetMasterIP");
            XmlNodeList puppetmasterportlist = xmlDoc.GetElementsByTagName("PuppetMasterPort");
            XmlNodeList serverslist          = xmlDoc.GetElementsByTagName("Server");

            _puppetIP   = puppetmasteriplist[0].InnerText;
            _puppetPort = Convert.ToInt32(puppetmasterportlist[0].InnerText);
            _servers    = new List <ServerMetadata>();

            for (int i = 0; i < 3; i++)
            {
                //TODO: currently just reading first server
                XmlNodeList    server_ipportlist = serverslist[i].ChildNodes;
                string         id      = server_ipportlist[0].InnerText;
                string         ip_addr = server_ipportlist[1].InnerText;
                int            port    = Convert.ToInt32(server_ipportlist[2].InnerText);
                ServerMetadata sm      = new ServerMetadata();
                sm.Username = id;
                sm.IP_Addr  = ip_addr;
                sm.Port     = port;
                _servers.Add(sm);
            }
        }
Example #3
0
        public IReadOnlyList <ServerMetadata> FetchMetaData()
        {
            using (var connection = _connectionFactory.CreateConnection())
            {
                connection.Open();

                using (var command = connection.CreateCommand())
                {
                    command.CommandText = "Select [Id], [HostName] from ServerMetadata";
                    var reader = command.ExecuteReader();
                    var result = new List <ServerMetadata>();

                    while (reader.Read())
                    {
                        var entity = new ServerMetadata();


                        entity.Id       = reader.GetFieldValue <long>(0);
                        entity.HostName = reader.GetFieldValue <string>(1);
                        result.Add(entity);
                    }
                    reader.Close();

                    return(result);
                }
            }
        }
Example #4
0
        public static ILookupService GetRandomServer(List <ServerMetadata> servers)
        {
            ILookupService server           = null;
            String         connectionString = "";
            ServerMetadata chosenServer     = null;

            while (server == null)
            {
                int server_num = new Random().Next(0, 3);

                chosenServer = servers[server_num];

                connectionString = "tcp://" + chosenServer.IP_Addr + ":" + chosenServer.Port + "/" + chosenServer.Username + "/" + Common.Constants.LOOKUP_SERVICE_NAME;

                try
                {
                    server = (ILookupService)Activator.GetObject(
                        typeof(ILookupService), connectionString);
                }
                catch (Exception)
                {
                    Log.Debug("Common", "Could not contact server, retrying in 100ms");
                }

                Thread.Sleep(100);
            }
            Console.WriteLine("Random server to contact is: " + connectionString);
            return(server);
        }
Example #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Server"/> class.
 /// </summary>
 public Server()
 {
     Addresses = new Dictionary<string, IList<ServerAddress>>();
     AttachedVolumes = new List<ServerVolumeReference>();
     Metadata = new ServerMetadata();
     SecurityGroups = new List<SecurityGroupReference>();
 }
Example #6
0
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.ApplyConfiguration(ServerMetadata.GetConfiguration());
            modelBuilder.ApplyConfiguration(ServerIpV4.GetIpV4Configuration());
            modelBuilder.ApplyConfiguration(ServerIpV6.GetIpV6Configuration());
            modelBuilder.ApplyConfiguration(Server.GetConfiguration());

            base.OnModelCreating(modelBuilder);
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Configurations.Add(ServerMetadata.GetConfiguration());
            modelBuilder.Configurations.Add(ServerIpV4.GetIpV4Configuration());
            modelBuilder.Configurations.Add(ServerIpV6.GetIpV6Configuration());
            modelBuilder.Configurations.Add(Server.GetConfiguration());
            modelBuilder.Configurations.Add(VideoChannel.GetConfiguration());
            modelBuilder.Configurations.Add(RecognitionLog.GetConfiguration());
        }
Example #8
0
        private static bool MergeServer(ServerModifierModel mergedServer,
                                        List <ServerModifier> userConfigServers,
                                        ServerMetadata defaultServerSchema,
                                        AppMetadata appMetadata)
        {
            var hasChange        = false;
            var userConfigServer = userConfigServers.FirstOrDefault(s => s.Id == mergedServer.Id);

            if (defaultServerSchema == null)
            {
                hasChange = true;
            }

            //Add new
            if (userConfigServer == null)
            {
                userConfigServer = new ServerModifier {
                    Id = mergedServer.Id
                };
                userConfigServers.Add(userConfigServer);
            }

            //Apply changes
            userConfigServer.TemplateId  = mergedServer.TemplateId;
            userConfigServer.BasedOn     = mergedServer.UseTemplateId;
            userConfigServer.Description = mergedServer.Description;

            if (mergedServer.TemplateId != 0 ||
                mergedServer.UseTemplateId != 0 ||
                !String.IsNullOrEmpty(mergedServer.Description))
            {
                hasChange = true;
            }

            if (mergedServer.Databases != null)
            {
                foreach (var mergedDatabase in mergedServer.Databases)
                {
                    var defaultDatabaseSchema = GetDatabaseMetadata(defaultServerSchema, appMetadata, mergedDatabase.Name);
                    if (MergeDatabase(mergedDatabase, userConfigServer.Databases, defaultDatabaseSchema, appMetadata))
                    {
                        hasChange = true;
                    }
                }
            }

            //If no change has been detected with the default config
            if (!hasChange)
            {
                userConfigServers.Remove(userConfigServer);
            }

            return(hasChange);
        }
Example #9
0
        private IConsistencyService getOtherServers(ServerMetadata servers)
        {
            ServerMetadata chosenServer     = servers;
            String         connectionString = "tcp://" + chosenServer.IP_Addr + ":" + chosenServer.Port + "/" + servers.Username + "/" + Common.Constants.CONSISTENCY_SERVICE_NAME;

            Log.Show(_username, "Trying to find server: " + connectionString);

            IConsistencyService server = (IConsistencyService)Activator.GetObject(
                typeof(IConsistencyService),
                connectionString);

            return(server);
        }
Example #10
0
        //used for adding servers in the treeview
        public void updateServersTree(object sender, EventArgs ea)
        {
            if (InvokeRequired)
            {
                Invoke(new Action <object, EventArgs>(updateServersTree), sender, ea);
                return;
            }
            ServerMetadata sm      = (ServerMetadata)sender;
            TreeNode       newNode = new TreeNode(sm.Username);

            newNode.Name = sm.Username;
            int index = treeView1.Nodes.IndexOfKey("Servers");

            treeView1.Nodes[index].Nodes.Insert(0, newNode);
            newNode.Parent.Expand();
            show(sm.Username + " just came online");
        }
        private IServerFacade connectToServerFacadeService(ServerMetadata sm)
        {
            String connectionString = "tcp://" + sm.IP_Addr + ":" + sm.Port + "/" + sm.Username + "/" + Common.Constants.SERVER_FACADE_SERVICE;

            IDictionary RemoteChannelProperties = new Dictionary <string, string>();

            RemoteChannelProperties["name"] = sm.Username;

            TcpChannel server_channel = new TcpChannel(RemoteChannelProperties, null, null);

            ChannelServices.RegisterChannel(server_channel, true);

            //TODO: uncomment and fix this to make it work
            IServerFacade facadeService = (IServerFacade)Activator.GetObject(
                typeof(IServerFacade),
                connectionString);

            return(facadeService);
        }
        public bool registerServer(string username, string ip_addr, int port)
        {
            ServerMetadata sm = new ServerMetadata();

            sm.Username = username;
            sm.IP_Addr  = ip_addr;
            sm.Port     = port;

            //adding the client metadata to the global hashtable so that it can be used later on
            servers_list.Add(username, sm);
            IServerFacade isf = connectToServerFacadeService(sm);

            serverFacadeList.Add(username, isf);


            Gui.updateServersTree(sm, null);

            return(true);
        }
Example #13
0
        private void connectMenuItem_Click(object sender, EventArgs e)
        {
            //fetch selected username
            string username = treeView1.SelectedNode.Text;

            if (username.Equals("Servers") || username.Equals("Clients"))
            {
                return;
            }

            string parent = treeView1.SelectedNode.Parent.Text;


            if (parent.Equals("Servers"))
            {
                ServerMetadata sm  = (ServerMetadata)pms.getServersList()[username];
                IServerFacade  isf = (IServerFacade)pms.getServerFacadeList()[username];
                isf.Connect(); /*commented because Server Facade is not implemented yet*/
                //show(username + " is now connected");
                treeView1.SelectedNode.ImageIndex         = 0;
                treeView1.SelectedNode.SelectedImageIndex = 0;
            }

            else if (parent.Equals("Clients"))
            {
                ClientMetadata cm = (ClientMetadata)pms.getClientsList()[username];
                IClientFacade  fs = (IClientFacade)pms.getClientFacadeList()[username];
                fs.Connect(); //EXCEPTION UNHANDLED - WASIF CHECK THIS
                show(username + " has been connected");
                treeView1.SelectedNode.ImageIndex         = 0;
                treeView1.SelectedNode.SelectedImageIndex = 0;
            }
            else
            {
                return;
            }
        }
Example #14
0
 /// <inheritdoc cref="ServerMetadata.DeleteAsync"/>
 public static void Delete(this ServerMetadata metadata, string key)
 {
     metadata.DeleteAsync(key).ForceSynchronous();
 }
Example #15
0
 /// <inheritdoc cref="ServerMetadata.UpdateAsync"/>
 public static void Update(this ServerMetadata metadata, bool overwrite = false)
 {
     metadata.UpdateAsync(overwrite).ForceSynchronous();
 }
Example #16
0
 /// <inheritdoc cref="ServerMetadata.CreateAsync"/>
 public static void Create(this ServerMetadata metadata, string key, string value)
 {
     metadata.CreateAsync(key, value).ForceSynchronous();
 }
 /// <inheritdoc cref="ComputeService.UpdateServerMetadataAsync" />
 public static ServerMetadata UpdateServerMetadata(this ComputeService service, Identifier serverId, ServerMetadata metadata, bool overwrite = false)
 {
     return(service.UpdateServerMetadataAsync(serverId, metadata, overwrite).ForceSynchronous());
 }
Example #18
0
        private void readEventFileAndDispatchEvents()
        {
            string line = string.Empty;

            System.IO.StreamReader sr = new
                                        System.IO.StreamReader(openFileDialog1.FileName);
            while ((line = sr.ReadLine()) != null)
            {
                show(line);
                string              opcode = line.Split(' ')[0];
                string              username;
                IClientFacade       icf;
                IServerFacade       sf;
                List <CalendarSlot> clientCalendar;
                //TODO: fetch initiator from Users list

                switch (opcode)
                {
                case "disconnect":
                    username = line.Split(' ')[1];

                    if (username.StartsWith("central"))
                    {
                        ServerMetadata sm  = (ServerMetadata)pms.getServersList()[username];
                        IServerFacade  isf = (IServerFacade)pms.getServerFacadeList()[username];
                        while (isf == null)
                        {
                            show("Trying to disconnect server: " + username);
                            isf = (IServerFacade)pms.getServerFacadeList()[username];
                            Thread.Sleep(100);
                        }

                        try
                        {
                            isf.Disconnect();
                            changeIconToDisconnected(username, null);
                        }
                        catch (Exception ioe)
                        {
                            MessageBox.Show(ioe.ToString());
                        }
                    }
                    else
                    {
                        icf = (IClientFacade)pms.getClientFacadeList()[username];
                        while (icf == null)
                        {
                            show("Trying to disconnect client: " + username);
                            icf = (IClientFacade)pms.getClientFacadeList()[username];
                            Thread.Sleep(1000);
                        }

                        try
                        {
                            icf.Disconnect();
                        }
                        catch (Exception ee)
                        {
                            show("Exception: " + ee.Message);
                        }

                        changeIconToDisconnected(username, null);
                    }
                    break;


                case "connect":

                    username = line.Split(' ')[1].Trim();
                    string ip   = line.Split(' ')[2].Split(':')[0].Trim();
                    int    port = Convert.ToInt32(line.Split(' ')[2].Split(':')[1]);

                    icf = (IClientFacade)pms.getClientFacadeList()[username];
                    sf  = (IServerFacade)pms.getServerFacadeList()[username];

                    if (icf != null)     //means the client has already been created
                    {
                        show("Trying to reconnect to client: " + username);
                        icf.Connect();
                        changeIconToConnected(username, null);
                    }

                    else if (sf != null)
                    {
                        show("Reconnecting to server: " + username);
                        sf.Connect();
                        changeIconToConnected(username, null);
                    }
                    else     //means a new process needs to be started
                    {
                        if (username.StartsWith("central"))
                        {
                            string           path      = server_dir;
                            ProcessStartInfo startInfo = new ProcessStartInfo();


                            startInfo.FileName    = path + "Server.exe";
                            startInfo.Arguments   = username + " " + port;
                            startInfo.WindowStyle = ProcessWindowStyle.Minimized;
                            Process process = new Process();
                            process.StartInfo = startInfo;
                            process.Start();
                            processes.Add(process);


                            //TODO: save the PIDS of all processes and kill them on exit

                            //if server  is online, we move on to the next event. If not, we wait until the server is online
                            IServerFacade isf = (IServerFacade)pms.getServerFacadeList()[username];
                            while (isf == null)
                            {
                                Thread.Sleep(500);
                                isf = (IServerFacade)pms.getServerFacadeList()[username];
                            }
                        }
                        else     //means its a client
                        {
                            string           path      = client_dir;
                            ProcessStartInfo startInfo = new ProcessStartInfo();

                            startInfo.FileName    = path + "Client.exe";
                            startInfo.Arguments   = username + " " + port;
                            startInfo.WindowStyle = ProcessWindowStyle.Minimized;
                            Process process = new Process();
                            process.StartInfo = startInfo;
                            process.Start();
                            processes.Add(process);

                            //if client  is online, we move on to the next event. If not, we wait until the client is online
                            IClientFacade cf = (IClientFacade)pms.getClientFacadeList()[username];
                            while (cf == null)
                            {
                                Thread.Sleep(500);
                                cf = (IClientFacade)pms.getClientFacadeList()[username];
                            }
                        }
                    }

                    break;

                case "readCalendar":
                    username = line.Split(' ')[1].Trim();
                    icf      = (IClientFacade)pms.getClientFacadeList()[username];
                    try
                    {
                        clientCalendar = icf.ReadCalendar();
                        show("Calendar for " + username + ":");
                        foreach (CalendarSlot slot in clientCalendar)
                        {
                            show(slot);
                        }
                    }
                    catch (Exception ee)
                    {
                        show("Exception: " + ee.Message);
                    }
                    break;

                case "reservation":
                    //reservation {GroupMeeting; user1, user2; 13, 25 }
                    string        data      = line.Split('{')[1].Split('}')[0].Trim();
                    string        desc      = data.Split(';')[0].Trim();
                    string        initiator = data.Split(';')[1].Split(',')[0].Trim();
                    List <string> usersList = data.Split(';')[1].Trim().Split(',').Select(s => s.Trim()).ToList <string>();
                    List <int>    slotsList = data.Split(';')[2].Trim().Split(',').Select(s => s.Trim()).ToList <string>().ConvertAll <int>(Convert.ToInt32);

                    ReservationRequest rr = new ReservationRequest();
                    rr.Description = desc;
                    rr.Users       = usersList;
                    rr.Slots       = slotsList;
                    icf            = (IClientFacade)pms.getClientFacadeList()[initiator];
                    while (icf == null)
                    {
                        show("Trying to reconnect to initiator: " + initiator);
                        icf = (IClientFacade)pms.getClientFacadeList()[initiator];
                        Thread.Sleep(100);
                    }

                    try
                    {
                        icf.CreateReservation(rr);
                    }
                    catch (Exception e)
                    {
                        show("Error on create reservation: " + e.Message);
                    }

                    Thread.Sleep(1000);
                    break;

                case "wait":
                    int seconds = Convert.ToInt32(line.Split(' ')[1].Trim());
                    show("Sleeping for " + seconds + " second(s)");
                    Thread.Sleep(seconds * 1000);
                    break;

                case "shutdown":
                    show("Shutting down all processes in 2 seconds");
                    Thread.Sleep(2000);


                    //killing all clients
                    foreach (Process pp in processes)
                    {
                        string userName = pp.StartInfo.Arguments.Split(' ')[0].Trim();

                        if (!userName.StartsWith("central"))
                        {
                            ((IClientFacade)pms.getClientFacadeList()[userName]).Disconnect();
                            pp.Kill();
                            removeNodeFromTreeView(userName, null);
                            show("Killed " + pp.StartInfo.Arguments);
                        }
                    }

                    //killing all servers
                    foreach (Process p in processes)
                    {
                        string userName = p.StartInfo.Arguments.Split(' ')[0].Trim();

                        if (userName.StartsWith("central"))
                        {
                            try
                            {
                                ((IServerFacade)pms.getServerFacadeList()[userName]).Disconnect();
                            }
                            catch (Exception ee)
                            {
                                show(ee.Message);
                            }
                            p.Kill();
                            removeNodeFromTreeView(userName, null);
                            show("Killed " + p.StartInfo.Arguments);
                        }
                    }

                    //cleaning up
                    pms.cleanUp();

                    //RemotingServices.Unmarshal(objRef);
                    //objRef = null;
                    //pms = null;

                    processes.Clear();

                    //unregistering channels
                    UnregisterChannels();

                    show(" ");
                    show("----------------------SHUTDOWN COMPLETE--------------------");
                    show(" ");
                    break;
                }
            }

            sr.Close();
        }
 /// <inheritdoc cref="ComputeService.UpdateServerMetadataAsync" />
 public static ServerMetadata UpdateServerMetadata(this ComputeService service, Identifier serverId, ServerMetadata metadata, bool overwrite = false)
 {
     return service.UpdateServerMetadataAsync(serverId, metadata, overwrite).ForceSynchronous();
 }
Example #20
0
        private static ObservableCollection <DatabaseModifierModel> LoadDatabaseTemplates(List <DatabaseModifier> userConfigTemplates,
                                                                                          ServerMetadata serverMetadata, AppMetadata appMetadata)
        {
            var returnVM = new ObservableCollection <DatabaseModifierModel>();

            //We show every single element from the user's config.
            var databasesToShow = userConfigTemplates;

            //We add the elements from the default metadata if not present.
            var userConfigDistinctDatabases = userConfigTemplates.Select(s => s.Name.GetDatabase()).Distinct();
            var databasesToAdd = serverMetadata.Select(s => s.Key).Distinct().Except(userConfigDistinctDatabases);

            databasesToShow.AddRange(from d in databasesToAdd select new DatabaseModifier {
                Name = d
            });

            foreach (var database in databasesToShow)
            {
                var defaultDbMetadata = GetDatabaseMetadata(serverMetadata, appMetadata, database.Name);

                returnVM.Add(new DatabaseModifierModel
                {
                    _name          = database.Name,
                    _templateId    = database.TemplateId,
                    _useTemplateId = database.BasedOn,
                    _description   = database.Description,
                    _schemas       = LoadSchemaTemplates(database.Schemas, defaultDbMetadata, appMetadata)
                });
            }

            return(returnVM);
        }