コード例 #1
0
 public Employee(DataBaseEntry x)
 {
     if (x.EventType.Equals("SessionLock") || x.EventType.Equals("SessionLogoff") || x.EventType.Equals("AssumedAway") || x.RemoteAccess == true || x.EventType.Equals("ConsoleDisconnect"))//Change When We know session names
     {
         atDesk = false;
     }
     else
     {
         atDesk = true;
     }
     name   = x.UserName;
     userID = x.UserID;
     eta    = x.ETA;
     time   = x.TimeOfEvent;
 }
コード例 #2
0
        public async void AddAppletEntry(DataBaseEntry entry)
        {
            //Prevent double-adding lock event
            recentEntry = entry.AutomaticLock ? false:true;
            Trace.WriteLine("ADD APPLET ENTRY ENTERED TRACE");
            using (IAsyncDocumentSession s = ds.OpenAsyncSession())
            {
                //Load DeviceIDs from db
                IList <string> deviceIDs = await s.Query <Device>("Device_Search").Select(x => x.DeviceID).ToListAsync();

                //Check that device and user exist
                if (deviceIDs.Contains(entry.DeviceID))
                {
                    //Add to db and save
                    await s.StoreAsync(entry);

                    await s.SaveChangesAsync();
                }
            }
        }
コード例 #3
0
        public string DBTest()
        {
            Device d = new Device();

            d.DeviceID   = "TestDeviceID";
            d.DeviceName = "InternBox4";
            d.UserID     = "TestUserID";
            d.VM         = false;
            string str = "Error";

            using (IDocumentStore store = new Raven.Client.Documents.DocumentStore
            {
                Urls = new[]
                {
                    "http://192.168.10.153:8080"
                },
                Database = "TestDB",
                Conventions = { }
            })
            {
                try
                {
                    store.Initialize();
                    using (IDocumentSession session = store.OpenSession())
                    {
                        session.Store(d);
                        session.SaveChanges();

                        DataBaseEntry loadedEnt = session.Load <DataBaseEntry>("DataBaseEntries/2-A");
                        str = loadedEnt.DeviceID;
                    }
                    return(str);
                }
                catch (Exception e)
                {
                    return(e.Message);
                }
            }
        }
コード例 #4
0
 public string EntryOutput(DataBaseEntry str)
 {
     return(str.EventType + ", " + str.UserID + ", " + str.DeviceID + ", " + str.AutomaticLock + ", " + str.ETA.ToString() + ", " + str.TimeOfEvent.ToString());
 }
コード例 #5
0
        public async void AddServiceEntry(DataBaseEntry entry)
        {
            Trace.WriteLine("ADD SERVICE ENTRY START RECENTENTRY: " + recentEntry);
            if (!recentEntry) //Prevets double recording of lock events
            {
                Trace.WriteLine("ADD SERVICE ENTRY ENTERED");
                Trace.WriteLine("EVENT TYPE: " + entry.EventType + " User: "******" Machine: " + entry.MachineName);

                if (entry.EventType == "SessionLock" || entry.EventType == "SessionUnlock")
                {
                    var inactiveClients = new List <string>();
                    foreach (var client in clients)
                    {
                        Trace.Write(client.Key);

                        if (client.Key.Substring(client.Key.Length - 7) != "-Service") //stops services being called
                        {
                            try                                                        //Tries to connect to client, if it fails it adds to inactiveClients to be removed
                            {
                                //The applet then calls the AddAppletEntry method to complete the record
                                Trace.WriteLine("ATTEMPTING FINISHDATABASEENTRY");

                                client.Value.FinishDataBaseEntry(entry);
                            }
                            catch
                            {
                                Trace.WriteLine("CLIENT CAUGHT");

                                inactiveClients.Add(client.Key);
                            }
                        }
                    }
                    //removes inactive clients from client list
                    if (inactiveClients.Count > 0)
                    {
                        foreach (var client in inactiveClients)
                        {
                            clients.Remove(client);
                        }
                    }
                }
                //Record log-off events immediately
                else
                {
                    Trace.WriteLine("ATTEMPTING IMMEDIATE ADD");
                    using (IAsyncDocumentSession s = ds.OpenAsyncSession())
                    {
                        try
                        {
                            Trace.WriteLine("NEW ENTRY DEVICE ID: " + entry.DeviceID);
                            //Find last entry for device
                            DataBaseEntry dBE = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.DeviceID == entry.DeviceID).OrderByDescending(y => y.TimeOfEvent).FirstAsync();

                            entry.UserID   = dBE.UserID;
                            entry.UserName = dBE.UserName;
                            Trace.WriteLine("Last entry UserID: " + dBE.UserID + "\nLast entry UserName: " + dBE.UserName);
                        }
                        catch
                        {
                            //Must be the device's first entry or something
                        }
                    }
                    AddAppletEntry(entry);
                }
            }
            recentEntry = false;
        }
コード例 #6
0
        //Returns list of all employees constructed from the last DataBaseEntry associated with their UserID
        public async Task <List <Employee> > GetEntriesForAlice()
        {
            List <Employee> ret = new List <Employee>();

            try
            {
                // Connect To db
                using (IAsyncDocumentSession s = ds.OpenAsyncSession())
                {
                    s.Advanced.MaxNumberOfRequestsPerSession = 200;
                    //List of devices
                    List <Device> devices = await s.Query <Device>("Device_Search").ToListAsync();

                    //List of userIDs
                    List <string> userIDs = devices.Select(x => x.UserID).Distinct().ToList();
                    //Iterate through list of users, select latest DataBaseEntry, create employee object, and add UserName to Employee
                    foreach (var u in userIDs)
                    {
                        //Try create an employee object. If no DataBase Entry is found for the user, skip
                        try
                        {
                            //Fetch latest 20 DataBaseEntries from user
                            List <DataBaseEntry> entries = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.UserID == u).OrderByDescending(x => x.TimeOfEvent).Take(20).ToListAsync();

                            //Find latest non-VPN login on non-VM machine
                            bool validEntry = false;
                            int  index      = 0;
                            for (int i = 0; i < entries.Count; i++)
                            {
                                if (!entries[i].RemoteAccess && !devices.Find(x => x.DeviceID == entries[i].DeviceID).VM)
                                {
                                    index      = i;
                                    validEntry = true;
                                    break;
                                }
                            }
                            DataBaseEntry entry = validEntry? entries[index]:null;
                            //Create Employee from Entry
                            Employee emp = new Employee(entry);
                            try
                            {
                                emp.ProfilePic = await s.Query <User>("User_Search").Where(x => x.UserID == emp.UserID).Select(y => y.ProfilePic).FirstOrDefaultAsync();
                            }
                            catch (Exception e)
                            {
                                emp.ProfilePic = e.Message;
                                //No profile pic for you
                            }
                            //Add to list
                            ret.Add(emp);
                        }
                        catch
                        {
                            //If the user hasn't signed in physically (ie non-VPN) on a non-WM machine in their last 20 entries, find there last logged action
                            DataBaseEntry dBE = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.UserID == u).OrderByDescending(y => y.TimeOfEvent).FirstOrDefaultAsync();

                            if (dBE != null)
                            {
                                dBE.EventType = "AssumedAway";
                                Employee awayEmployee = new Employee(dBE);
                                ret.Add(awayEmployee);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                //Error Message as DataBaseEntry
                Employee error = new Employee(new DataBaseEntry(e.Message, "Error", e.Message, "NoDeviceID", "NoMachineName", "NoSessionID", DateTime.Now, false, false, TimeSpan.Zero));
                error.Name = e.Message;
                ret.Add(error);
            }

            return(ret.OrderBy(x => x.Name).ToList());
        }
コード例 #7
0
        public async Task <Tuple <List <DataBaseEntry>, int> > GetEntriesBetweenForUser(string UserName, DateTime start, DateTime end, int indexStart, string sortField, string sortDirection)
        {
            List <DataBaseEntry> ret   = new List <DataBaseEntry>();
            int             numResults = 0;
            QueryStatistics stats      = new QueryStatistics();

            string[] userTerms = UserName.Split(' ');
            try
            {
                //Connect to database
                using (IAsyncDocumentSession s = ds.OpenAsyncSession())
                {
                    switch (sortDirection)
                    {
                    case "Ascending":
                        switch (sortField)
                        {
                        case "UserName":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderBy(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();

                            Trace.WriteLine("UserName:"******" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end);
                            //ret = await  s.Advanced.AsyncDocumentQuery<DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start +" AND TimeOfEvent < " + end).OrderBy(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();
                            break;

                        case "EventType":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderBy(x => x.EventType).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "UserID":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderBy(x => x.UserID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "MachineName":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderBy(x => x.MachineName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "DeviceID":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderBy(x => x.DeviceID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "TimeOfEvent":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderBy(x => x.TimeOfEvent).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "AutomaticLock":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderBy(x => x.AutomaticLock).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "ETA":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderBy(x => x.ETA).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "RemoteAccess":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderBy(x => x.RemoteAccess).Skip(indexStart).Take(20).ToListAsync();

                            break;
                        }
                        break;

                    case "Descending":
                        switch (sortField)
                        {
                        case "UserName":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderByDescending(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "EventType":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderByDescending(x => x.EventType).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "UserID":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderByDescending(x => x.UserID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "MachineName":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderByDescending(x => x.MachineName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "DeviceID":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderByDescending(x => x.DeviceID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "TimeOfEvent":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderByDescending(x => x.TimeOfEvent).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "AutomaticLock":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderByDescending(x => x.AutomaticLock).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "ETA":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderByDescending(x => x.ETA).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "RemoteAccess":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).OrderByDescending(x => x.RemoteAccess).Skip(indexStart).Take(20).ToListAsync();

                            break;
                        }
                        break;
                    }
                    await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().Statistics(out stats).WhereLucene("UserName", string.Join(" AND ", userTerms) + " AND TimeOfEvent > " + start + " AND TimeOfEvent < " + end).ToListAsync();

                    numResults = stats.TotalResults;
                }
            }
            catch (Exception e)
            {
                //Error Message as DataBaseEntry
                DataBaseEntry error = new DataBaseEntry("Error", "Error", e.Message, "NoDeviceID", "NoMachineName", "NoSessionID", DateTime.Now, false, false, TimeSpan.Zero);
                ret.Add(error);
            }

            //Return all entries between a specific time period for a specific user
            return(new Tuple <List <DataBaseEntry>, int>(ret, numResults));
        }
コード例 #8
0
        public async Task <Tuple <List <DataBaseEntry>, int> > GetAllEntries(int indexStart, string sortField, string sortDirection)
        {
            //try
            //{
            //    Trace.WriteLine("USER: "******"Error " + e.Message);
            //}
            int                  numResults = 0;
            QueryStatistics      stats      = new QueryStatistics();
            List <DataBaseEntry> ret        = new List <DataBaseEntry>();

            try
            {
                //Connect to database
                using (IAsyncDocumentSession s = ds.OpenAsyncSession())
                {
                    //Get all entries
                    switch (sortDirection)
                    {
                    case "Ascending":
                        switch (sortField)
                        {
                        case "UserName":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderBy(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "EventType":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderBy(x => x.EventType).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "UserID":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderBy(x => x.UserID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "MachineName":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderBy(x => x.MachineName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "DeviceID":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderBy(x => x.DeviceID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "TimeOfEvent":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderBy(x => x.TimeOfEvent).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "AutomaticLock":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderBy(x => x.AutomaticLock).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "ETA":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderBy(x => x.ETA).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "RemoteAccess":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderBy(x => x.RemoteAccess).Skip(indexStart).Take(20).ToListAsync();

                            break;
                        }
                        break;

                    case "Descending":
                        switch (sortField)
                        {
                        case "UserName":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderByDescending(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "EventType":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderByDescending(x => x.EventType).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "UserID":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderByDescending(x => x.UserID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "MachineName":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderByDescending(x => x.MachineName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "DeviceID":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderByDescending(x => x.DeviceID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "TimeOfEvent":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderByDescending(x => x.TimeOfEvent).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "AutomaticLock":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderByDescending(x => x.AutomaticLock).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "ETA":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderByDescending(x => x.ETA).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "RemoteAccess":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").OrderByDescending(x => x.RemoteAccess).Skip(indexStart).Take(20).ToListAsync();

                            break;
                        }
                        break;
                    }
                    await s.Query <DataBaseEntry>("DataBaseEntry_Search").Statistics(out stats).ToListAsync();

                    numResults = stats.TotalResults;
                }
            }
            catch (Exception e)
            {
                //Error Message as DataBaseEntry
                DataBaseEntry error = new DataBaseEntry("Error", "Error", e.Message, "NoDeviceID", "NoMachineName", "NoSessionID", DateTime.Now, false, false, TimeSpan.Zero);
                ret.Add(error);
            }
            return(new Tuple <List <DataBaseEntry>, int>(ret, numResults));
        }
コード例 #9
0
        public async Task <Tuple <List <DataBaseEntry>, int> > GetEntriesBetween(DateTime start, DateTime end, int indexStart, string sortField, string sortDirection)
        {
            int                  numResults = 0;
            QueryStatistics      stats      = new QueryStatistics();
            List <DataBaseEntry> ret        = new List <DataBaseEntry>();

            try
            {
                //Connect to database
                using (IAsyncDocumentSession s = ds.OpenAsyncSession())
                {
                    switch (sortDirection)
                    {
                    case "Ascending":
                        switch (sortField)
                        {
                        case "UserName":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderBy(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "EventType":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderBy(x => x.EventType).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "UserID":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderBy(x => x.UserID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "MachineName":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderBy(x => x.MachineName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "DeviceID":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderBy(x => x.DeviceID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "TimeOfEvent":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderBy(x => x.TimeOfEvent).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "AutomaticLock":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderBy(x => x.AutomaticLock).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "ETA":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderBy(x => x.ETA).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "RemoteAccess":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderBy(x => x.RemoteAccess).Skip(indexStart).Take(20).ToListAsync();

                            break;
                        }
                        break;

                    case "Descending":
                        switch (sortField)
                        {
                        case "UserName":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderByDescending(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "EventType":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderByDescending(x => x.EventType).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "UserID":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderByDescending(x => x.UserID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "MachineName":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderByDescending(x => x.MachineName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "DeviceID":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderByDescending(x => x.DeviceID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "TimeOfEvent":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderByDescending(x => x.TimeOfEvent).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "AutomaticLock":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderByDescending(x => x.AutomaticLock).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "ETA":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderByDescending(x => x.ETA).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "RemoteAccess":
                            ret = await s.Query <DataBaseEntry>("DataBaseEntry_Search").Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).OrderByDescending(x => x.RemoteAccess).Skip(indexStart).Take(20).ToListAsync();

                            break;
                        }
                        break;
                    }
                    await s.Query <DataBaseEntry>("DataBaseEntry_Search").Statistics(out stats).Where(x => x.TimeOfEvent >= start && x.TimeOfEvent <= end).ToListAsync();

                    numResults = stats.TotalResults;
                }
            }
            catch (Exception e)
            {
                //Error Message as DataBaseEntry
                DataBaseEntry error = new DataBaseEntry("Error", "Error", e.Message, "NoDeviceID", "NoMachineName", "NoSessionID", DateTime.Now, false, false, TimeSpan.Zero);
                ret.Add(error);
            }

            //Return all entries between a specific time period
            return(new Tuple <List <DataBaseEntry>, int>(ret, numResults));
        }
コード例 #10
0
        public async Task <Tuple <List <DataBaseEntry>, int> > GetEntriesOfUser(string UserName, int indexStart, string sortField, string sortDirection)
        {
            int                  numResults = 0;
            QueryStatistics      stats      = new QueryStatistics();
            List <DataBaseEntry> ret        = new List <DataBaseEntry>();

            string[] userTerms = UserName.Split(' ');
            try
            {
                //Connect to database
                using (IAsyncDocumentSession s = ds.OpenAsyncSession())
                {
                    var sortProperty = typeof(DataBaseEntry).GetProperty(sortField, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
                    //Return entries of a specific user
                    switch (sortDirection)
                    {
                    case "Ascending":
                        switch (sortField)
                        {
                        case "UserName":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderBy(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();

                            //ret = await s.Query<DataBaseEntry>("DataBaseEntry_Search").Search(x => x.UserName, "*" + UserName + "*").OrderBy(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();
                            break;

                        case "EventType":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderBy(x => x.EventType).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "UserID":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderBy(x => x.UserID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "MachineName":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderBy(x => x.MachineName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "DeviceID":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderBy(x => x.DeviceID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "TimeOfEvent":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderBy(x => x.TimeOfEvent).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "AutomaticLock":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderBy(x => x.AutomaticLock).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "ETA":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderBy(x => x.ETA).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "RemoteAccess":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderBy(x => x.RemoteAccess).Skip(indexStart).Take(20).ToListAsync();

                            break;
                        }
                        break;

                    case "Descending":
                        switch (sortField)
                        {
                        case "UserName":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderByDescending(x => x.UserName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "EventType":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderByDescending(x => x.EventType).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "UserID":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderByDescending(x => x.UserID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "MachineName":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderByDescending(x => x.MachineName).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "DeviceID":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderByDescending(x => x.DeviceID).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "TimeOfEvent":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderByDescending(x => x.TimeOfEvent).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "AutomaticLock":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderByDescending(x => x.AutomaticLock).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "ETA":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderByDescending(x => x.ETA).Skip(indexStart).Take(20).ToListAsync();

                            break;

                        case "RemoteAccess":
                            ret = await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().WhereLucene("UserName", string.Join(" AND ", userTerms)).OrderByDescending(x => x.RemoteAccess).Skip(indexStart).Take(20).ToListAsync();

                            break;
                        }
                        break;
                    }
                    await s.Advanced.AsyncDocumentQuery <DataBaseEntry>().Statistics(out stats).WhereLucene("UserName", string.Join(" AND ", userTerms)).ToListAsync();

                    numResults = stats.TotalResults;
                }
            }
            catch (Exception e)
            {
                //Error Message as DataBaseEntry
                DataBaseEntry error = new DataBaseEntry("Error", "Error", e.Message, "NoDeviceID", "NoMachineName", "NoSessionID", DateTime.Now, false, false, TimeSpan.Zero);
                ret.Add(error);
            }
            return(new Tuple <List <DataBaseEntry>, int>(ret, numResults));
        }