Пример #1
0
        public ActionResult Thread(string id, string issueThread)
        {
            if (id == null)
            {
                throw new ArgumentNullException("id", "InitiativeId was not provided.");
            }

            var i            = _initiativeBusiness.GetInitiatives().Where(x => x.Name == id).ToArray();
            var initiativeId = Guid.Empty;

            if (i.Count() == 1)//Name is unique
            {
                initiativeId = _initiativeBusiness.GetInitiatives().Single(x => x.Name == id).Id;
            }
            else//go with id
            {
                initiativeId = _initiativeBusiness.GetInitiatives().Single(x => x.Id == Guid.Parse(id)).Id;
            }

            if (initiativeId == Guid.Empty)
            {
                throw new NullReferenceException("No initiative found for the specified uid.");
            }

            var initiative     = _initiativeBusiness.GetInitiative(initiativeId);
            var applicationIds = initiative.ApplicationGroups.SelectMany(x => x.Applications).Select(x => x.Id).ToArray();

            var versions = new List <IApplicationVersion>();

            foreach (var applicationId in applicationIds)
            {
                versions.AddRange(_applicationVersionBusiness.GetApplicationVersions(applicationId));
            }

            var issues   = versions.SelectMany(x => x.IssueTypes).SelectMany(x => x.Issues).Where(x => x.IssueThreadGuid == Guid.Parse(issueThread)).ToArray();
            var sessions = _sessionBusiness.GetSessionsForApplications(applicationIds).ToArray();
            var users    = sessions.Select(x => _userBusiness.GetUser(x.UserFingerprint));

            var model = new IssueThreadModel()
            {
                InitiativeUniqueIdentifier = id,
                InitiativeName             = initiative.Name,
                Issues   = issues,
                Sessions = sessions,
                Users    = users,
            };

            return(View(model));
        }
Пример #2
0
        public ActionResult Details(string applicationVersionId, string sessionId)
        {
            var session = _sessionBusiness.GetSessionsForApplicationVersion(applicationVersionId).Single(x => x.Id == Guid.Parse(sessionId));
            var version = _applicationVersionBusiness.GetApplicationVersions(session.ApplicationId).Single(x => x.Id == applicationVersionId);


            return(View(version.IssueTypes));
        }
Пример #3
0
        // GET: Application/Details/5
        public ActionResult Details(string id, string application)
        {
            if (id == null)
            {
                throw new ArgumentNullException("id", "No initiative id provided.");
            }

            var initiative = _initiativeBusiness.GetInitiative(_accountRepository.FindById(User.Identity.GetUserId()).Email, id);
            var app        = initiative.ApplicationGroups.SelectMany(x => x.Applications).Single(x => x.Name == application);
            var versions   = _applicationVersionBusiness.GetApplicationVersions(app.Id).ToArray();
            var model      = GetApplicationModel(initiative, application, versions);

            @ViewBag.IsArchive = false;
            @ViewBag.Title     = "Application Details";
            @ViewBag.SiteRoot  = GetSiteRoot();
            return(View(model));
        }
Пример #4
0
        // GET: Version/Details/5
        public ActionResult Details(string id, string application, string version)
        {
            var initiative    = _initiativeBusiness.GetInitiative(_accountRepository.FindById(User.Identity.GetUserId()).Email, id);
            var applicationId = initiative.ApplicationGroups.SelectMany(x => x.Applications).Single(x => x.Name == application).Id;
            var versions      = _applicationVersionBusiness.GetApplicationVersions(applicationId).ToArray();
            var versionName   = _applicationVersionBusiness.GetApplicationVersion(initiative.Id.ToString(), applicationId.ToString(), version).Version;

            //var versionIds = versions.Select(v => v.Id).ToArray();

            //change to EnvironmentViewModel when fixed
            //var environments = new List<string>();
            //foreach (var versionId in versionIds)
            //{
            //    environments.Add(_sessionBusiness.GetSessionsForApplicationVersion(versionId).Select(x => x.Environment));
            //}

            var ver = versions.Single(x => x.Id.Replace(":", "") == version || x.Version == version);

            //var sessions = _sessionBusiness.GetSessionsForApplicationVersion();

            var issue = new IssueViewModel
            {
                InitiativeId               = initiative.Id.ToString(),
                InitiativeName             = initiative.Name,
                ApplicationName            = application,
                Version                    = version,
                VersionName                = versionName,
                IssueTypes                 = ver.IssueTypes,
                Sessions                   = _sessionBusiness.GetSessionsForApplicationVersion(ver.Id),
                ApplicationVersionId       = applicationId.ToString(),
                InitiativeUniqueIdentifier = id,
            };
            var allEnvironments = _initiativeBusiness.GetEnvironmentColors(User.Identity.GetUserId(), _accountRepository.FindById(User.Identity.GetUserId()).UserName);
            var envs            = issue.Sessions.Select(x => x.Environment).Distinct();

            var environments = new List <EnvironmentViewModel>();

            foreach (var environment in envs)
            {
                if (allEnvironments.ContainsKey(environment))
                {
                    string color;
                    allEnvironments.TryGetValue(environment, out color);
                    environments.Add(new EnvironmentViewModel()
                    {
                        Name  = environment,
                        Color = color,
                    });
                }
            }

            //issue.Environments = environments.Select(x => new EnvironmentViewModel { Name = x.Key, Color = x.Value}).ToList();
            issue.Environments     = environments;
            issue.UniqueIdentifier = issue.GetUniqueIdentifier(versionName);

            //issue.ExceptionTypeName = ver.IssueTypes.Select(x => x.ExceptionTypeName);
            //issue.Message = ver.IssueTypes.Select(x => x.Message);
            //issue.Level = ver.IssueTypes.Select(x => x.IssueLevel.ToString());
            //issue.Count = ver.IssueTypes.Select(x => x.Count.ToString());
            //issue.Ticket = ver.IssueTypes.Select(x => x.Ticket.ToString());


            var users = issue.Sessions.Select(user => _userBusiness.GetUser(user.UserFingerprint)).ToList().GroupBy(x => x.Id).Select(x => x.First());

            issue.Users = users;

            issue.Machines = _machineBusiness.GetMachinesByApplicationVersion(ver.Id);

            return(View(issue));
        }
Пример #5
0
        public ActionResult SearchResults(string searchText)
        {
            var model = new SearchModel()
            {
                IsConfirmed = _accountRepository.GetUser(_accountRepository.FindById(User.Identity.GetUserId()).Email).EMailConfirmed,
                SearchText  = searchText,
            };

            if (!model.IsConfirmed)
            {
                return(View("SearchResults", model));
            }

            var searchResultRows = new List <SearchResultRowModel>();

            var initiativeHeads = _initiativeBusiness.GetInitiativesByDeveloper(_accountRepository.FindById(User.Identity.GetUserId()).Email);
            var initiatives     = _initiativeBusiness.GetInitiatives().ToArray();
            var userInitiatives = initiativeHeads.Select(initiativeHead => initiatives.Single(x => x.Id == initiativeHead.Id)).ToArray();

            foreach (var initiative in userInitiatives)
            {
                var applications = initiative.ApplicationGroups.SelectMany(x => x.Applications).ToArray();
                var initiativeUniqueIdentifier = initiative.GetUniqueIdentifier(initiatives.Select(x => x.Name));

                var versions = new List <IApplicationVersion>();
                foreach (var application in applications)
                {
                    versions.AddRange(_applicationVersionBusiness.GetApplicationVersions(application.Id));
                }

                foreach (var version in versions)
                {
                    foreach (var issueType in version.IssueTypes)
                    {
                        if (issueType.Ticket.ToString().Equals(searchText))
                        {
                            foreach (var issue in issueType.Issues)
                            {
                                searchResultRows.Add(new SearchResultRowModel()
                                {
                                    InitiativeName             = initiative.Name,
                                    InitiativeUniqueIdentifier = initiativeUniqueIdentifier,
                                    ApplicationName            = applications.Single(x => x.Id == version.ApplicationId).Name,
                                    Version = version.Version,
                                    VersionUniqueIdentifier = version.GetUniqueIdentifier(versions.Select(x => x.Version)),
                                    IssueType   = issueType,
                                    Issue       = issue,
                                    Environment = GetSession(issue.SessionId).Environment,
                                });
                            }
                        }
                        else
                        {
                            foreach (var issue in issueType.Issues)
                            {
                                if (issue.Ticket.ToString().Equals(searchText))
                                {
                                    searchResultRows.Add(new SearchResultRowModel()
                                    {
                                        InitiativeName             = initiative.Name,
                                        InitiativeUniqueIdentifier = initiativeUniqueIdentifier,
                                        ApplicationName            = applications.Single(x => x.Id == version.ApplicationId).Name,
                                        Version = version.Version,
                                        VersionUniqueIdentifier = version.GetUniqueIdentifier(versions.Select(x => x.Version)),
                                        IssueType   = issueType,
                                        Issue       = issue,
                                        Environment = GetSession(issue.SessionId).Environment,
                                    });
                                }
                                else
                                {
                                    if (!string.IsNullOrEmpty(issueType.ExceptionTypeName))
                                    {
                                        if (issueType.ExceptionTypeName.Contains(searchText))
                                        {
                                            searchResultRows.Add(new SearchResultRowModel()
                                            {
                                                InitiativeName             = initiative.Name,
                                                InitiativeUniqueIdentifier = initiativeUniqueIdentifier,
                                                ApplicationName            = applications.Single(x => x.Id == version.ApplicationId).Name,
                                                Version = version.Version,
                                                VersionUniqueIdentifier = version.GetUniqueIdentifier(versions.Select(x => x.Version)),
                                                IssueType   = issueType,
                                                Issue       = issue,
                                                Environment = GetSession(issue.SessionId).Environment,
                                            });
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            var allEnvironments      = _initiativeBusiness.GetEnvironmentColors(User.Identity.GetUserId(), _accountRepository.FindById(User.Identity.GetUserId()).UserName);
            var environmentsInResult = searchResultRows.Select(x => x.Environment).Distinct();

            var environments = new List <EnvironmentViewModel>();

            foreach (var env in environmentsInResult)
            {
                if (allEnvironments.ContainsKey(env))
                {
                    string color;
                    allEnvironments.TryGetValue(env, out color);
                    environments.Add(new EnvironmentViewModel()
                    {
                        Name  = env,
                        Color = color,
                    });
                }
            }

            model.SearchResultRows = searchResultRows;
            model.Environments     = environments;

            return(View("SearchResults", model));
        }
Пример #6
0
        public RegisterIssueResponse RegisterIssue(RegisterIssueRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request", "No request object provided.");
            }
            if (request.Session == null)
            {
                throw new ArgumentException("No session object in request was provided. Need object '{ \"Session\":{...} }' in root.");
            }
            if (request.Session.SessionGuid == Guid.Empty)
            {
                throw new ArgumentException("No valid session guid provided.");
            }
            if (string.IsNullOrEmpty(request.Session.ClientToken))
            {
                throw new ArgumentException("No ClientToken provided.");
            }
            if (request.IssueType == null)
            {
                throw new ArgumentException("No IssueType object in request was provided. Need object '{ \"IssueType\":{...} }' in root.");
            }
            if (string.IsNullOrEmpty(request.IssueType.Message))
            {
                throw new ArgumentException("No message in issue type provided.");
            }
            if (string.IsNullOrEmpty(request.IssueType.IssueLevel))
            {
                throw new ArgumentException("No issue level in issue type provided.");
            }

            var callerIp = _membershipAgent.GetUserHostAddress();

            ISession session = null;

            if (request.Session.Application == null)
            {
                session = GetSession(request.Session.SessionGuid);
                if (session == null)
                {
                    throw new ArgumentException("Cannot find session with provided session id.").AddData("SessionGuid", request.Session.SessionGuid);
                }
            }

            var ad = GetApplicationData(request, session);

            var fingerprint = _applicationVersionBusiness.AssureApplicationFingerprint(ad.Fingerprint, ad.Version, ad.SupportToolkitNameVersion, ad.BuildTime, ad.Name, request.Session.ClientToken);

            IApplication application;

            try
            {
                application = _initiativeBusiness.RegisterApplication((ClientToken)request.Session.ClientToken, ad.Name, ad.Fingerprint);
            }
            catch (FingerprintException)
            {
                throw new ArgumentException("No value for application fingerprint provided. A globally unique identifier should be provided, perhaps a machine sid or a hash of unique data that does not change.");
            }

            var applicationVersion = _applicationVersionBusiness.RegisterApplicationVersionUsage(fingerprint, application.Id, ad.Version, ad.SupportToolkitNameVersion, ad.BuildTime, request.Session.Environment);

            if (applicationVersion.Ignore)
            {
                return(new RegisterIssueResponse {
                    IssueTypeTicket = null, IssueInstanceTicket = null, ResponseMessage = applicationVersion.ResponseMessage, IsOfficial = applicationVersion.IsOfficial,
                });
            }

            if (session == null)
            {
                if (request.Session.User.Fingerprint == null)
                {
                    throw new ArgumentException("No user fingerprint provided.");
                }
                session = request.Session.ToSession(applicationVersion.Id, application.Id, DateTime.UtcNow, null, null, callerIp);
            }

            _sessionBusiness.RegisterSession(session);

            var ud = GetUserData(request, session);

            _userBusiness.RegisterUser((Fingerprint)session.UserFingerprint, ud.UserName);

            var md = GetMachineData(request, session);

            _machineBusiness.RegisterMachine((Fingerprint)md.Fingerprint, md.Name, md.Data);

            int    issueTypeTicket;
            int    issueTicket;
            string issueTypeResponseMessage;

            var mutex = new Mutex(false, application.Id.ToString());

            try
            {
                mutex.WaitOne();

                var applicationVersions = _applicationVersionBusiness.GetApplicationVersions(application.Id).ToArray();

                var issueType = applicationVersion.IssueTypes.FirstOrDefault(x => request.IssueType.AreEqual(x));
                if (issueType == null)
                {
                    var issueTypes          = applicationVersions.SelectMany(x => x.IssueTypes).ToArray();
                    var lastIssueTypeTicket = issueTypes.Any() ? issueTypes.Max(x => x.Ticket) : 0;
                    issueTypeTicket = lastIssueTypeTicket + 1;
                    var inner = ToInnerIssueType(request.IssueType.Inner);

                    issueType = new Quilt4.BusinessEntities.IssueType(request.IssueType.ExceptionTypeName, request.IssueType.Message, request.IssueType.StackTrace ?? string.Empty, request.IssueType.IssueLevel.ToIssueLevel(), inner, new List <IIssue>(), issueTypeTicket, null);
                    applicationVersion.Add(issueType);
                }
                else
                {
                    issueTypeTicket = issueType.Ticket;
                }

                issueTypeResponseMessage = issueType.ResponseMessage;

                var issues          = applicationVersions.SelectMany(x => x.IssueTypes).SelectMany(x => x.Issues).ToArray();
                var lastIssueTicket = issues.Any() ? issues.Max(x => x.Ticket) : 0;
                issueTicket = lastIssueTicket + 1;

                var issue = new Issue(request.Id, request.ClientTime, DateTime.UtcNow, request.VisibleToUser, request.Data, request.IssueThreadGuid, request.UserHandle, request.UserInput, issueTicket, session.Id);
                issueType.Add(issue);

                UpdateApplicationVersion(applicationVersion);
            }
            finally
            {
                mutex.ReleaseMutex();
            }

            var response = new RegisterIssueResponse
            {
                IssueTypeTicket     = application.TicketPrefix + _settingsBusiness.GetIssueTypeTicketPrefix() + issueTypeTicket,
                IssueInstanceTicket = application.TicketPrefix + _settingsBusiness.GetIssueTicketPrefix() + issueTicket,
                ResponseMessage     = applicationVersion.ResponseMessage ?? issueTypeResponseMessage,
                IsOfficial          = applicationVersion.IsOfficial
            };

            return(response);
        }