public override void OnException(HttpActionExecutedContext context)
        {
            var arguments       = JsonConvert.SerializeObject(context.ActionContext.ActionArguments);
            var formatException = "{0} Url: {1}" + Environment.NewLine +
                                  "Arguments: {2}" + Environment.NewLine +
                                  "Exception: {3}" + Environment.NewLine +
                                  "StackTrace: {4}";
            var log = LogManager.GetLogger(typeof(ExceptionHandlingAttribute));

            log.Error(string.Format(formatException,
                                    context.Request.Method.Method,
                                    context.Request.RequestUri.AbsoluteUri,
                                    arguments,
                                    context.Exception.Message,
                                    context.Exception));

            using (var contextBd = new CanvasExtendContenxt())
            {
                var logEntity = new Log
                {
                    Date      = DateTime.Now,
                    Loger     = typeof(ExceptionHandlingAttribute).FullName,
                    Message   = context.Exception.Message,
                    Exception = context.Exception.ToString(),
                    Level     = GlobalValues.ERROR
                };
                contextBd.Log.Add(logEntity);
                contextBd.SaveChanges();
            }
        }
예제 #2
0
        public int SaveLog(LogDto log)
        {
            if (log == null)
            {
                return(-1);
            }

            var entity = new Log
            {
                Message   = log.Message,
                Exception = log.Exception,
                Date      = log.Date,
                Level     = log.Level,
                Loger     = log.Loger
            };

            _context.Log.Add(entity);
            _context.SaveChanges();
            return(entity.Id);
        }
예제 #3
0
        public void EnqueueProcess(Expression <Action> action, int?progressId = null)
        {
            var call = action.Body as MethodCallExpression;

            if (call == null)
            {
                throw new Exception("La expresión no corresponde a una llamada a un método");
            }
            if (call.Object == null)
            {
                throw new Exception("La expresión no corresponde a un método de instancia");
            }

            var methodInfo = call.Method;
            var argsValues = call.Arguments.Select(a =>
            {
                var argAsObj = Expression.Convert(a, typeof(object));
                return(Expression.Lambda <Func <object> >(argAsObj, null)
                       .Compile()());
            });
            var targetOnly = Expression.Lambda(call.Object, null);
            var compiled   = targetOnly.Compile();
            var result     = compiled.DynamicInvoke(null);
            var type       = result.GetType();

            Task.Run(() =>
            {
                using (var container = AutofacConfig.Container.BeginLifetimeScope())
                {
                    var service = container.Resolve(type);
                    try
                    {
                        var invokeData = methodInfo.Invoke(service, argsValues.ToArray());
                        var state      = ProgressInfoState.Completed;
                        if (invokeData != null && progressId.HasValue)
                        {
                            var baseResult = invokeData as BaseResult;
                            if (baseResult != null)
                            {
                                state = baseResult.HasErrors ? ProgressInfoState.HasErrors : state;
                            }
                            _cache.Put(string.Format(GlobalValues.CACHE_PROGRESS_INFO, progressId), invokeData, TimeSpan.FromMinutes(30));
                        }
                        var progress = _contenxt.ProgressInfo.Find(progressId);
                        if (progress != null)
                        {
                            progress.State      = state.ToString();
                            progress.Completion = 100;
                            _contenxt.SaveChanges();
                        }
                    }
                    catch (Exception exception)
                    {
                        var log = LogManager.GetLogger(typeof(JobService));
                        log.Error("Migracion", exception);

                        var logEntity = new Log
                        {
                            Date      = DateTime.Now,
                            Loger     = typeof(JobService).FullName,
                            Message   = exception.Message,
                            Exception = exception.ToString(),
                            Level     = GlobalValues.ERROR
                        };
                        _contenxt.Log.Add(logEntity);
                        _contenxt.SaveChanges();

                        if (progressId.HasValue)
                        {
                            var progress = _contenxt.ProgressInfo.Find(progressId);
                            if (progress != null)
                            {
                                progress.State      = ProgressInfoState.Failed.ToString();
                                progress.Message    = string.Format(CanvasApiStrings.ErrorJobServices, logEntity.Id);
                                progress.Exception  = exception.ToString();
                                progress.Completion = 100;
                                _contenxt.SaveChanges();
                            }
                        }
                    }
                }
            });
        }
예제 #4
0
        public ResultValue <AccountExtendDto> UpdateAccountExtend(int id)
        {
            var result  = new ResultValue <AccountExtendDto>();
            var preData = PreValidarDatos(result, id);

            if (result.HasErrors)
            {
                return(result);
            }
            var resAccount       = preData.Item1;
            var resCourses       = preData.Item2;
            var resAccountExtend = preData.Item3;

            var estudiosGestor = _wEstudios.ObtenerEstudiosUNIR(0);
            var estudioGestor  = estudiosGestor.Respuesta.FirstOrDefault(e => e.idEstudio == int.Parse(resAccount.Value.SisId));

            if (estudioGestor == null)
            {
                result.Errors.Add(CanvasExtedStrings.ErrorEstudioNoExiste);
                return(result);
            }
            foreach (var courseCanvasDto in resCourses.Elements)
            {
                var asignatura = resAccountExtend.Value.Asignaturas.FirstOrDefault(a => a.Id == int.Parse(courseCanvasDto.SisId));
                if (asignatura == null)
                {
                    _coursesApi.Update(new CourseSaveParameters
                    {
                        Id         = courseCanvasDto.Id,
                        Asignatura = null
                    });
                }
            }

            var accountExtend = _context.AccountExtends.Find(id);

            accountExtend.Estudio.Nombre = estudioGestor.sNombreEstudio;
            accountExtend.PeriodoActivos.Clear();
            accountExtend.Asignaturas.Clear();

            /*****Guardar Asignaturas Asociadas al estudio*****/
            var resAsignaturas = _wEstudios.ObtenerAsignaturasDeEstudio(int.Parse(resAccount.Value.SisId));
            var ids            = resAsignaturas.Respuesta.Select(a => a.idAsignatura).ToArray();
            var asignaturas    = _context.Asignaturas.Where(a => ids.Contains(a.Id)).ToList();

            foreach (var item in resAsignaturas.Respuesta)
            {
                var asignatura = asignaturas.FirstOrDefault(a => a.Id == item.idAsignatura);
                if (asignatura == null)
                {
                    asignatura = new Asignatura
                    {
                        Id     = item.idAsignatura,
                        Nombre = item.sNombreAsignatura
                    };
                    _context.Asignaturas.Add(asignatura);
                }
                else
                {
                    asignatura.Nombre = item.sNombreAsignatura;
                }
                accountExtend.Asignaturas.Add(asignatura);
            }
            /*****Guardar PeriodoActivos asociados al estudio*****/
            var resPeriodosActivos = _wEstudios.ObtenerCursosDeAsignaturasDeEstudio(int.Parse(resAccount.Value.SisId));

            ids = resPeriodosActivos.Respuesta.listaPeriodosActivos.Select(a => a.idPeriodoMatriculacion).ToArray();
            var periodoActivos = _context.PeriodosActivos.Where(p => ids.Contains(p.Id)).ToList();

            foreach (var item in resPeriodosActivos.Respuesta.listaPeriodosActivos)
            {
                var periodoActivo = periodoActivos.FirstOrDefault(a => a.Id == item.idPeriodoMatriculacion);
                if (periodoActivo == null)
                {
                    periodoActivo = new PeriodoActivo
                    {
                        Id            = item.idPeriodoMatriculacion,
                        Nombre        = item.sNombrePeriodoMatriculacion,
                        FechaInicio   = item.fechaInicioPeriodo,
                        FechaFin      = item.fechaFinPeriodo,
                        NroPeriodo    = item.iNumPeriodo,
                        AnioAcademico = item.sAyoAcademinco
                    };
                    _context.PeriodosActivos.Add(periodoActivo);
                }
                else
                {
                    periodoActivo.Nombre        = item.sNombrePeriodoMatriculacion;
                    periodoActivo.FechaInicio   = item.fechaInicioPeriodo;
                    periodoActivo.FechaFin      = item.fechaFinPeriodo;
                    periodoActivo.NroPeriodo    = item.iNumPeriodo;
                    periodoActivo.AnioAcademico = item.sAyoAcademinco;
                }
                accountExtend.PeriodoActivos.Add(periodoActivo);
            }
            _context.SaveChanges();
            return(result);
        }