Example #1
0
        public static bool ShowErrorWindowInNewProcess(Exception ex)
        {
            var    assemblyHelper    = new AssemblyHelper();
            string errorReporterPath = assemblyHelper.GetCurrentAssemblyDirectory();

            errorReporterPath = Path.Combine(errorReporterPath, "ErrorReport.exe");

            if (!File.Exists(errorReporterPath))
            {
                return(false);
            }

            try
            {
                string errorFile = Path.GetTempPath() + Guid.NewGuid() + ".err";

                ReportSerializer.SaveReport(BuildReport(ex), errorFile);

                Process.Start(errorReporterPath, "\"" + errorFile + "\"");
            }
            catch
            {
                return(false);
            }

            return(true);
        }
Example #2
0
    public static void CLRDemo(SqlXml metadata)
    {
        // Deserialize the report
        ReportSerializer serializer = new ReportSerializer();
        XmlReader        reader     = metadata.CreateReader();

        RDL.Report report = (RDL.Report)serializer.Deserialize(reader);

        // Generate the table schema
        DataTable table = GenerateSchema(report);

        // Generate preview results
        GeneratePreviewData(table, report);

        if (!SqlContext.IsAvailable)
        {
            return;
        }

        SqlDataRecord record = TableRowToSqlDataRecord(table);

        SqlContext.Pipe.SendResultsStart(record);

        foreach (DataRow row in table.Rows)
        {
            record.SetValues(row.ItemArray);
            SqlContext.Pipe.SendResultsRow(record);
        }

        SqlContext.Pipe.SendResultsEnd();
        return;
    }
Example #3
0
 public void SaveToFile(string fileName)
 {
     using (var writer = new XmlTextWriter(fileName, Encoding.UTF8))
     {
         ReportSerializer.Save(writer, Report);
         ReportFileName = fileName;
     }
 }
Example #4
0
        public void LoadFromFile(string fileName)
        {
            var report = new Report();

            using (var reader = new XmlTextReader(fileName))
            {
                ReportSerializer.Load(reader, report);
            }
            SetReport(report);
            ReportFileName = fileName;
        }
Example #5
0
 private void ProcessReportReceived(Report report)
 {
     if (runTargetForm.OutputToFile)
     {
         using (var writer = new XmlTextWriter(dlgSave.FileName, Encoding.UTF8))
         {
             writer.Formatting  = Formatting.Indented;
             writer.Indentation = 1;
             writer.IndentChar  = ' ';
             ReportSerializer.Save(writer, report);
         }
     }
     else
     {
         ServiceContainer.getService <IReportService>().Open(report);
     }
 }
Example #6
0
        private void ReportingGenerate_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            CrawlingContext context = Model.SelectedFile.Model;

            string defaultFileName = context.FullPath != null?Path.GetFileNameWithoutExtension(context.FullPath.FullName) : "Report";

            // Configure save file dialog box
            SaveFileDialog dlg = new SaveFileDialog();

            dlg.FileName   = defaultFileName;                 // Default file name
            dlg.DefaultExt = ".xlsx";                         // Default file extension
            dlg.Filter     = "Excel document (.xlsx)|*.xlsx"; // Filter files by extension

            // Process save file dialog box results
            if (dlg.ShowDialog() == true)
            {
                context.Status = CrawlingStatus.GeneratingReport;

                ThreadPool.QueueUserWorkItem(_ =>
                {
                    ExcelPackage pkg = new ExcelPackage();
                    ReportSerializer.AddReport(pkg, ReportGenerator.GenerateRequestsReport(context.Resources));
                    ReportSerializer.AddReport(pkg, ReportGenerator.GenerateCachingReport(context.Resources));
                    ReportSerializer.AddReport(pkg, ReportGenerator.GenerateReferenceSummaryReport(context.Resources));
                    ReportSerializer.AddReport(pkg, ReportGenerator.GenerateReferencesReport(context.Resources));
                    ReportSerializer.AddReport(pkg, ReportGenerator.GenerateRedirectionReport(context.Resources));
                    ReportSerializer.AddReport(pkg, ReportGenerator.GenerateContentReport(context.Resources));
                    ReportSerializer.AddReport(pkg, ReportGenerator.GenerateErrorsReport(context.Resources));
                    //foreach (ReportConfig reportConfig in Model.ReportConfigs)
                    //    ReportSerializer.AddReport(pkg, ReportGenerator.GenerateReport(reportConfig, context.Resources));

                    pkg.SaveAs(new FileInfo(dlg.FileName));

                    context.Status = CrawlingStatus.Ready;
                    RefreshActions();
                });
            }
        }
Example #7
0
        public string CreateReport(IReport report)
        {
            var response = ExecuteApiRequest("report/queue", HttpMethod.Post, "criteria", ReportSerializer.SerializeReport(report));

            try
            {
                var result = JSON.DeserializeDynamic(response.Content.ReadAsStringAsync().Result);
                return(result.Id);
            }
            catch (Exception)
            {
                throw new AdzerkApiException("Report result does not contain report Id.", new { response.RequestMessage, response });
            }
        }
        private async Task ProcessFeed(bool useLongFeed, bool disableNotice)
        {
            using var request = new HttpRequestMessage(HttpMethod.Get,
                                                       useLongFeed
                                ? "http://www.data.jma.go.jp/developer/xml/feed/eqvol_l.xml"
                                : "http://www.data.jma.go.jp/developer/xml/feed/eqvol.xml");

            DateTimeOffset?lastModified;

            if (useLongFeed)
            {
                lastModified = LongFeedLastModified;
            }
            else
            {
                lastModified = ShortFeedLastModified;
            }

            // 初回取得じゃない場合チェックしてもらう
            if (lastModified != null)
            {
                request.Headers.IfModifiedSince = lastModified;
            }
            using var response = await Client.SendAsync(request);

            if (response.StatusCode == HttpStatusCode.NotModified)
            {
                Logger.Debug("JMAXMLフィード - NotModified");
                return;
            }
            Logger.Debug($"JMAXMLフィード更新処理開始 Last:{lastModified:yyyy/MM/dd HH:mm:ss} Current:{response.Content.Headers.LastModified:yyyy/MM/dd HH:mm:ss}");

            using var reader = XmlReader.Create(await response.Content.ReadAsStreamAsync());
            var feed = SyndicationFeed.Load(reader);

            // 求めているものを新しい順で舐める
            var matchItems = feed.Items.Where(i => ParseTitles.Any(t => t == i.Title.Text));

            if (useLongFeed)
            {
                matchItems = matchItems.OrderByDescending(i => i.LastUpdatedTime);
            }
            else
            {
                matchItems = matchItems.OrderBy(i => i.LastUpdatedTime);
            }

            // URLにないものを抽出
            foreach (var item in matchItems)
            {
                if (ParsedMessages.Contains(item.Id))
                {
                    continue;
                }

                Logger.Trace($"処理 {item.LastUpdatedTime:yyyy/MM/dd HH:mm:ss} {item.Title.Text}");

                if (!Directory.Exists(CacheFolderName))
                {
                    Directory.CreateDirectory(CacheFolderName);
                }

                int retry = 0;
                // リトライループ
                while (true)
                {
                    var cresponse = await Client.SendAsync(new HttpRequestMessage(HttpMethod.Get, item.Links[0].Uri));

                    if (cresponse.StatusCode != HttpStatusCode.OK)
                    {
                        retry++;
                        if (retry >= 10)
                        {
                            Logger.Warning($"XMLの取得に失敗しました! Status: {cresponse.StatusCode} Url: {item.Links[0].Uri}");
                            break;
                        }
                        continue;
                    }
                    // TODO: もう少し綺麗にしたい
                    try
                    {
                        var cacheFilePath = Path.Join(CacheFolderName, Path.GetFileName(item.Links[0].Uri.ToString()));
                        if (!File.Exists(cacheFilePath))
                        {
                            using var wstr = File.OpenWrite(cacheFilePath);
                            await(await cresponse.Content.ReadAsStreamAsync()).CopyToAsync(wstr);
                        }
                        using var rstr = File.OpenRead(cacheFilePath);
                        var report = (Report)ReportSerializer.Deserialize(rstr);

                        // TODO: EventIdの異なる電文に対応する
                        var eq = Earthquakes.FirstOrDefault(e => e.Id == report.Head.EventID);
                        if (!useLongFeed || eq == null)
                        {
                            if (eq == null)
                            {
                                eq = new Earthquake
                                {
                                    Id        = report.Head.EventID,
                                    IsSokuhou = true,
                                    Intensity = JmaIntensity.Unknown
                                };
                                if (useLongFeed)
                                {
                                    Earthquakes.Add(eq);
                                }
                                else
                                {
                                    Earthquakes.Insert(0, eq);
                                }
                            }

                            switch (report.Control.Title)
                            {
                            case "震度速報":
                            {
                                if (!eq.IsSokuhou)
                                {
                                    break;
                                }
                                eq.IsSokuhou      = true;
                                eq.OccurrenceTime = report.Head.TargetDateTime;
                                eq.IsReportTime   = true;

                                var infoItem = report.Head.Headline.Informations.First().Items.First();
                                eq.Intensity = infoItem.Kind.Name.Replace("震度", "").ToJmaIntensity();
                                eq.Place     = infoItem.Areas.Area.First().Name;
                                break;
                            }

                            case "震源に関する情報":
                            {
                                eq.IsSokuhou      = false;
                                eq.OccurrenceTime = report.Body.Earthquake.OriginTime;
                                eq.IsReportTime   = false;

                                eq.Place     = report.Body.Earthquake.Hypocenter.Area.Name;
                                eq.Magnitude = report.Body.Earthquake.Magnitude.Value;
                                eq.Depth     = report.Body.Earthquake.Hypocenter.Area.Coordinate.GetDepth() ?? -1;
                                break;
                            }

                            case "震源・震度に関する情報":
                            {
                                eq.IsSokuhou      = false;
                                eq.OccurrenceTime = report.Body.Earthquake.OriginTime;
                                eq.IsReportTime   = false;

                                eq.Intensity = report.Body.Intensity?.Observation?.MaxInt?.ToJmaIntensity() ?? JmaIntensity.Unknown;
                                eq.Place     = report.Body.Earthquake.Hypocenter.Area.Name;
                                eq.Magnitude = report.Body.Earthquake.Magnitude.Value;
                                eq.Depth     = report.Body.Earthquake.Hypocenter.Area.Coordinate.GetDepth() ?? -1;
                                break;
                            }

                            default:
                                Logger.Error("不明なTitleをパースしました。: " + report.Control.Title);
                                break;
                            }
                            if (!disableNotice)
                            {
                                EarthquakeUpdatedEvent.Publish(eq);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("デシリアライズ時に例外が発生しました。 " + ex);
                    }
                    ParsedMessages.Add(item.Id);
                    break;
                }

                if (useLongFeed && Earthquakes.Count > 10)
                {
                    break;
                }
            }
            if (!useLongFeed && Earthquakes.Count > 20)
            {
                Earthquakes.RemoveRange(20, Earthquakes.Count - 20);
            }
            if (ParsedMessages.Count > 100)
            {
                ParsedMessages.RemoveRange(100, ParsedMessages.Count - 100);
            }

            if (useLongFeed)
            {
                LongFeedLastModified = response.Content.Headers?.LastModified?.UtcDateTime;
            }
            else
            {
                ShortFeedLastModified = response.Content.Headers?.LastModified?.UtcDateTime;
            }

            // キャッシュフォルダのクリーンアップ
            var cachedFiles = Directory.GetFiles(CacheFolderName, "*.xml");

            if (cachedFiles.Length < 20)             // 20件以内なら削除しない
            {
                return;
            }
            foreach (var file in cachedFiles)
            {
                if (DateTime.Now - File.GetCreationTime(file) > TimeSpan.FromDays(10))
                {
                    File.Delete(file);
                }
            }
        }
        static int Main(string[] args)
        {
            try
            {
                var settings = new WorkSettings();
                if (!settings.InitializeFromCommandLine(args))
                {
                    return(-1);
                }

                if (settings.ErrorsToStdout)
                {
                    Console.SetError(Console.Out);
                }

                using (Registration.Create(settings.Register ? System.Reflection.Assembly.GetExecutingAssembly().Location : null))
                {
                    //Console.ReadLine();

                    var connector = new Connector();
                    connector.StatusMessageReceived += connector_StatusMessageReceived;
                    connector.LogEntryReceived      += connector_LogEntryReceived;

                    connector.UseFileLogging(true);
                    connector.UsePipeLogging(true);
                    connector.SetLogging((Logging)settings.LogLevel);

                    foreach (var item in settings.IncludeItems)
                    {
                        try
                        {
                            connector.IncludeItem(item);
                        }
                        catch (ArgumentException)
                        {
                            Console.Error.WriteLine("Item '" + item + "' have wrong format");
                        }
                    }

                    foreach (var item in settings.ExcludeItems)
                    {
                        try
                        {
                            connector.ExcludeItem(item);
                        }
                        catch (ArgumentException)
                        {
                            Console.Error.WriteLine("Item '" + item + "' have wrong format");
                        }
                    }

                    var options = new SessionRunOptions
                    {
                        TargetPath      = settings.TargetPath,
                        TargetDirectory = settings.TargetWorkingDir,
                        TargetArguments = settings.TargetArgs,
                        RedirectOutput  = true,
                        DelayClose      = false,
                        FlattenDomains  = !settings.DisableFlattenDomains
                    };

                    connector.Options = options;
                    connector.StartTarget();

                    try
                    {
                        var writer = settings.OutputToFile
                            ? new XmlTextWriter(File.CreateText(settings.FileNameForReport))
                            : new XmlTextWriter(Console.Out);
                        using (writer)
                        {
                            writer.Formatting  = Formatting.Indented;
                            writer.Indentation = 1;
                            writer.IndentChar  = ' ';
                            ReportSerializer.Save(writer, connector.Report);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.Error.WriteLine("Can't save report (" + ex.Message + ")");
                    }

#if DEBUG
                    WriteListOfSkippedItems(connector.Report);
#endif

                    if (connector.TargetExitCode.HasValue)
                    {
                        return(connector.TargetExitCode.Value);
                    }
                } // end using
            }
            catch (SettingsException ex)
            {
                Console.Error.WriteLine(ex.Message);
                return(-1);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
                Console.Error.WriteLine(ex.StackTrace);
                return(-1);
            }

            return(0);
        }