コード例 #1
0
ファイル: ThreadPoolMonitor.cs プロジェクト: xj0229/gsf
 private static void LoadingAdjustedTimestamp_OnHighLoad()
 {
     if (s_lastResetTime.ElapsedSeconds() > 10)
     {
         s_lastResetTime = ShortTime.Now;
         MonitorThreads();
     }
 }
コード例 #2
0
        public bool IsCertificateTrusted(X509Certificate channelCertificate)
        {
            lock (m_syncRoot)
            {
TryAgain:
                if (!m_list.TryGetValue(channelCertificate.GetCertHashString(), out var data))
                {
                    if (m_lastCertRefresh.ElapsedSeconds() > 60)//check at most once per minute
                    {
                        RebuildCerts();
                        goto TryAgain;
                    }

                    return(false);
                }

                return(channelCertificate.GetRawCertData().SequenceEqual(data));
            }
        }
コード例 #3
0
        /// <summary>
        /// Attempts to take a token from the rate limiter.
        /// </summary>
        /// <returns>true if token was successfully taken, False if all tokens were consumed.</returns>
        public bool TryTakeToken()
        {
            var currentTime     = ShortTime.Now;
            var tokensGenerated = m_updateTime.ElapsedSeconds(currentTime) * m_tokenPerSecond;

            //To limit rounding errors at high call rates,
            //do not add a token until it acumiliates to a relatively large value.
            if (tokensGenerated > 0.5)
            {
                m_tokens     = Math.Min(m_tokens + tokensGenerated, m_maxTokens);
                m_updateTime = currentTime;
            }

            if (m_tokens < 0.99)
            {
                return(false);
            }

            m_tokens--;
            return(true);
        }
コード例 #4
0
        private bool TryFindCertificate(string thumbprint, out X509Certificate2 cert, out CtpAccount account)
        {
            lock (m_syncRoot)
            {
TryAgain:
                if (!m_certificateAccounts.TryGetValue(thumbprint, out var tuple))
                {
                    if (m_lastCertRefresh.ElapsedSeconds() > 60)//check at most once per minute
                    {
                        RebuildCerts();
                        goto TryAgain;
                    }

                    cert    = null;
                    account = null;
                    return(false);
                }
                cert    = new X509Certificate2(tuple.Item2);
                account = m_accounts[tuple.Item1];
                return(true);
            }
        }
コード例 #5
0
        private unsafe string TestFile(string fileName)
        {
            ShortTime lastReport          = ShortTime.Now;
            int       errorBlocks         = 0;
            uint      firstBlockWithError = uint.MaxValue;

            try
            {
                using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    int blockSize = FileHeaderBlock.SearchForBlockSize(stream);
                    stream.Position = 0;
                    byte[] data = new byte[blockSize];
                    stream.ReadAll(data, 0, blockSize);
                    var header = FileHeaderBlock.Open(data);

                    fixed(byte *lp = data)
                    {
                        stream.Position = header.HeaderBlockCount * blockSize;

                        uint startingBlock = header.HeaderBlockCount;

                        if (m_shouldQuickScan)
                        {
                            uint blocksToScan = (uint)Math.Ceiling(m_mbToScan * 1024 * 1024 / blockSize);
                            if (blocksToScan < header.LastAllocatedBlock)
                            {
                                startingBlock = Math.Max(header.HeaderBlockCount, header.LastAllocatedBlock - blocksToScan);
                            }
                        }

                        for (uint x = startingBlock; x <= header.LastAllocatedBlock; x++)
                        {
                            long checksum1;
                            int  checksum2;

                            stream.ReadAll(data, 0, blockSize);

                            Footer.ComputeChecksum((IntPtr)lp, out checksum1, out checksum2, blockSize - 16);

                            long checksumInData1 = *(long *)(lp + blockSize - 16);
                            int  checksumInData2 = *(int *)(lp + blockSize - 8);
                            if (!(checksum1 == checksumInData1 && checksum2 == checksumInData2))
                            {
                                firstBlockWithError = Math.Min(firstBlockWithError, x);
                                errorBlocks++;
                            }
                            if (m_quit)
                            {
                                if (errorBlocks == 0)
                                {
                                    return("Quit Early - No Errors Found");
                                }
                                return($"Quit Early - Blocks With Errors {errorBlocks} Starting At {firstBlockWithError}");
                            }
                            if (lastReport.ElapsedSeconds() > .25)
                            {
                                lastReport       = ShortTime.Now;
                                lblProgress.Text = $"Completed {m_filesScanned} of {m_filesToScan} files. Current File: {(stream.Position / (double)stream.Length).ToString("0.0%")}";
                                Application.DoEvents();
                            }
                        }
                    }
                }

                if (errorBlocks == 0)
                {
                    return("No Errors Found");
                }
                return($"Blocks With Errors {errorBlocks} Starting At {firstBlockWithError}");
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return("Error");
            }
        }
コード例 #6
0
        void m_task_Running(object sender, EventArgs <ScheduledTaskRunningReason> e)
        {
            if (e.Argument == ScheduledTaskRunningReason.Disposing)
            {
                return;
            }

            m_task.Start(m_routeLatency);

            m_routeOperations++;

            if (m_lastStatusUpdate.ElapsedSeconds() > 15)
            {
                m_lastStatusUpdate = ShortTime.Now;
                Log.Publish(MessageLevel.Info, MessageFlags.None, "Routing Update",
                            string.Format("Route Operations: {0}, Input Frames: {1}, Input Measurements: {2}, Output Measurements: {3}",
                                          m_routeOperations, m_measurementsRoutedInputFrames,
                                          m_measurementsRoutedInputMeasurements,
                                          m_measurementsRoutedOutput));
            }

            var map = m_globalCache;

            try
            {
                int measurementsRouted = 0;

                List <IMeasurement> measurements;
                while (m_inboundQueue.TryDequeue(out measurements))
                {
                    measurementsRouted += measurements.Count;
                    Interlocked.Add(ref m_pendingMeasurements, -measurements.Count);

                    //For loops are faster than ForEach for List<T>
                    //Process Optimized Consumers
                    for (int x = 0; x < map.RoutingPassthroughAdapters.Count; x++)
                    {
                        map.RoutingPassthroughAdapters[x].ProcessMeasurementList(measurements);
                    }

                    //Process Broadcast Consumers
                    for (int x = 0; x < map.BroadcastConsumers.Count; x++)
                    {
                        m_measurementsRoutedOutput += measurements.Count;
                        map.BroadcastConsumers[x].MeasurementsToRoute.AddRange(measurements);
                    }

                    m_measurementsRoutedInputFrames++;
                    m_measurementsRoutedInputMeasurements += measurements.Count;
                    for (int x = 0; x < measurements.Count; x++)
                    {
                        var             measurement = measurements[x];
                        List <Consumer> consumers   = map.GlobalSignalLookup[measurement.Key.RuntimeID];
                        if (consumers != null)
                        {
                            for (int i = 0; i < consumers.Count; i++)
                            {
                                m_measurementsRoutedOutput++;
                                consumers[i].MeasurementsToRoute.Add(measurement);
                            }
                        }
                    }

                    //If any adapter has too many measurements on their batch
                    //Route all adapter's measurements
                    if (measurementsRouted > m_batchSize)
                    {
                        measurementsRouted = 0;
                        foreach (var consumer in map.NormalDestinationAdapters)
                        {
                            measurementsRouted = Math.Max(measurementsRouted, consumer.MeasurementsToRoute.Count);
                            if (consumer.MeasurementsToRoute.Count > m_batchSize)
                            {
                                foreach (var c2 in map.NormalDestinationAdapters)
                                {
                                    c2.RoutingComplete();
                                }
                                measurementsRouted = 0;
                                break;
                            }
                        }
                    }
                }
            }
            finally
            {
                foreach (var consumer in map.NormalDestinationAdapters)
                {
                    consumer.RoutingComplete();
                }
            }
        }