Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Rewrite BucketCollector | Richard van der Hoff | 2020-09-30 | 1 | -47/+68 |
| | | | | | | | | | | | | This was a bit unweildy for what I wanted: in particular, I wanted to assign each measurement straight into a bucket, rather than storing an intermediate Counter which didn't do any bucketing at all. I've replaced it with something that is hopefully a bit easier to use. (I'm not entirely sure what the difference between a HistogramMetricFamily and a GaugeHistogramMetricFamily is, but given our counters can go down as well as up the latter *sounds* more accurate?) | ||||
* | Fix _exposition.py to stop stripping samples | Richard van der Hoff | 2020-09-30 | 1 | -11/+29 |
| | | | | | | Our hacked-up `_exposition.py` was stripping out some samples it shouldn't have been. Put them back in, to more closely match the upstream `exposition.py`. | ||||
* | Drop support for ancient prometheus_client (#8426) | Richard van der Hoff | 2020-09-30 | 1 | -22/+2 |
| | | | | Drop compatibility hacks for prometheus-client pre 0.4.0. Debian stretch and Fedora 31 both have newer versions, so hopefully this will be ok. | ||||
* | Use slots in attrs classes where possible (#8296) | Patrick Cloke | 2020-09-14 | 1 | -2/+2 |
| | | | | | slots use less memory (and attribute access is faster) while slightly limiting the flexibility of the class attributes. This focuses on objects which are instantiated "often" and for short periods of time. | ||||
* | Stop sub-classing object (#8249) | Patrick Cloke | 2020-09-04 | 2 | -10/+10 |
| | |||||
* | Convert runWithConnection to async. (#8121) | Patrick Cloke | 2020-08-19 | 1 | -1/+1 |
| | |||||
* | Convert run_as_background_process inner function to async. (#8032) | Patrick Cloke | 2020-08-06 | 1 | -22/+12 |
| | |||||
* | Improve stacktraces from exceptions in background processes (#7808) | Richard van der Hoff | 2020-07-09 | 1 | -1/+9 |
| | | | use `Failure()` to fish out the real exception. | ||||
* | Add some metrics for inbound and outbound federation processing times (#7755) | Erik Johnston | 2020-06-30 | 1 | -0/+6 |
| | |||||
* | Set Content-Length for Metrics requests (#7730) | Christian Svensson | 2020-06-23 | 1 | -1/+4 |
| | | | | | | HTTP requires the response to contain a Content-Length header unless chunked encoding is being used. Prometheus metrics endpoint did not set this, causing software such as prometheus-proxy to not be able to scrape synapse for metrics. Signed-off-by: Christian Svensson <blue@cmd.nu> | ||||
* | Replace iteritems/itervalues/iterkeys with native versions. (#7692) | Patrick Cloke | 2020-06-15 | 1 | -4/+2 |
| | |||||
* | Make inflight background metrics more efficient. (#7597) | Erik Johnston | 2020-05-29 | 1 | -34/+70 |
| | | | Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> | ||||
* | synapse.metrics: implement detailed memory usage reporting on PyPy (#7536) | Ivan Shapovalov | 2020-05-22 | 1 | -1/+78 |
| | | | | | | PyPy's gc.get_stats() returns an object containing detailed allocator statistics which could be beneficial to collect as metrics. Signed-off-by: Ivan Shapovalov <intelfx@intelfx.name> | ||||
* | Allow configuration of Synapse's cache without using synctl or environment ↵ | Amber Brown | 2020-05-11 | 1 | -4/+8 |
| | | | | variables (#6391) | ||||
* | Add prometheus metrics for the number of active pushers (#7103) | Richard van der Hoff | 2020-03-19 | 2 | -7/+10 |
| | |||||
* | Clarify list/set/dict/tuple comprehensions and enforce via flake8 (#6957) | Patrick Cloke | 2020-02-21 | 2 | -3/+3 |
| | | | | Ensure good comprehension hygiene using flake8-comprehensions. | ||||
* | Fix up some typechecking (#6150) | Amber Brown | 2019-10-02 | 2 | -4/+4 |
| | | | | | | * type checking fixes * changelog | ||||
* | Update comments and docstring | Richard van der Hoff | 2019-09-25 | 1 | -4/+6 |
| | |||||
* | Add wrap_as_background_process decorator. | Erik Johnston | 2019-09-24 | 1 | -1/+28 |
| | | | | | This does the same thing as `run_as_background_process` but means we don't need to create superfluous functions. | ||||
* | Fix for structured logging tests stomping on logs (#6023) | Amber Brown | 2019-09-13 | 2 | -4/+5 |
| | |||||
* | Add a build info metric to Prometheus (#6005) | Amber Brown | 2019-09-10 | 1 | -0/+12 |
| | |||||
* | Support Prometheus_client 0.4.0+ (#5636) | Amber Brown | 2019-07-18 | 3 | -20/+275 |
| | |||||
* | Move logging utilities out of the side drawer of util/ and into logging/ (#5606) | Amber Brown | 2019-07-04 | 1 | -1/+1 |
| | |||||
* | Don't log GC 0s at INFO (#5557) | Amber Brown | 2019-06-28 | 1 | -1/+4 |
| | |||||
* | Run Black. (#5482) | Amber Brown | 2019-06-20 | 2 | -22/+18 |
| | |||||
* | Prometheus histograms are cumalative | Erik Johnston | 2019-06-14 | 1 | -1/+0 |
| | |||||
* | fix prometheus rendering error | Amber H. Brown | 2019-06-14 | 1 | -1/+1 |
| | |||||
* | Expose statistics on extrems to prometheus (#5384) | Amber Brown | 2019-06-13 | 1 | -20/+92 |
| | |||||
* | Add metrics for number of outgoing EDUs, by type (#4695) | Richard van der Hoff | 2019-02-20 | 1 | -2/+0 |
| | |||||
* | Fix exception in background metrics collection | Erik Johnston | 2018-10-03 | 1 | -2/+6 |
| | | | | | We attempted to iterate through a list on a separate thread without doing the necessary copying. | ||||
* | Add missing logger | Erik Johnston | 2018-09-20 | 1 | -0/+4 |
| | |||||
* | Handle exceptions thrown by background tasks | Erik Johnston | 2018-09-20 | 1 | -0/+2 |
| | | | | Fixes #3921 | ||||
* | Remove spurious comment | Erik Johnston | 2018-09-14 | 1 | -2/+0 |
| | |||||
* | Add in flight real time metrics for Measure blocks | Erik Johnston | 2018-09-14 | 1 | -1/+109 |
| | |||||
* | isort | Erik Johnston | 2018-08-21 | 1 | -1/+2 |
| | |||||
* | Make the in flight background process metrics thread safe | Erik Johnston | 2018-08-20 | 1 | -5/+20 |
| | |||||
* | fix metric name | Richard van der Hoff | 2018-08-07 | 1 | -1/+1 |
| | |||||
* | more metrics for the federation and appservice senders | Richard van der Hoff | 2018-08-07 | 1 | -0/+13 |
| | |||||
* | Fix some looping_call calls which were broken in #3604 | Richard van der Hoff | 2018-07-26 | 1 | -2/+8 |
| | | | | | | | | | It turns out that looping_call does check the deferred returned by its callback, and (at least in the case of client_ips), we were relying on this, and I broke it in #3604. Update run_as_background_process to return the deferred, and make sure we return it to clock.looping_call. | ||||
* | Resource tracking for background processes | Richard van der Hoff | 2018-07-18 | 1 | -0/+179 |
| | | | | | | | | | | | | | | | | This introduces a mechanism for tracking resource usage by background processes, along with an example of how it will be used. This will help address #3518, but more importantly will give us better insights into things which are happening but not being shown up by the request metrics. We *could* do this with Measure blocks, but: - I think having them pulled out as a completely separate metric class will make it easier to distinguish top-level processes from those which are nested. - I want to be able to report on in-flight background processes, and I don't think we want to do this for *all* Measure blocks. | ||||
* | run isort | Amber Brown | 2018-07-09 | 1 | -6/+5 |
| | |||||
* | Attempt to be more performant on PyPy (#3462) | Amber Brown | 2018-06-28 | 1 | -1/+2 |
| | |||||
* | Fix description of "python_gc_time" metric | Richard van der Hoff | 2018-06-21 | 1 | -1/+1 |
| | |||||
* | spell gauge correctly | Matthew Hodgson | 2018-06-16 | 1 | -1/+1 |
| | |||||
* | add a last seen metric (#3396) | Amber Brown | 2018-06-14 | 1 | -0/+21 |
| | |||||
* | Hopefully, fix LaterGuage error handling | Richard van der Hoff | 2018-06-04 | 1 | -3/+6 |
| | |||||
* | Run Prometheus on a different port, optionally. (#3274) | Amber Brown | 2018-05-31 | 2 | -1/+6 |
| | |||||
* | pep8 | Matthew Hodgson | 2018-05-29 | 1 | -0/+1 |
| | |||||
* | disable CPUMetrics if no /proc/self/stat | Matthew Hodgson | 2018-05-29 | 1 | -0/+3 |
| | | | | fixes build on macOS again | ||||
* | invalid syntax :( | Amber Brown | 2018-05-28 | 1 | -2/+1 |
| | |||||
* | update metrics to be in seconds | Amber Brown | 2018-05-28 | 1 | -9/+10 |
| | |||||
* | pepeightttt | Amber Brown | 2018-05-23 | 1 | -0/+1 |
| | |||||
* | add back CPU metrics | Amber Brown | 2018-05-23 | 1 | -1/+35 |
| | |||||
* | more cleanup | Amber Brown | 2018-05-22 | 1 | -3/+1 |
| | |||||
* | cleanup | Amber Brown | 2018-05-22 | 1 | -6/+22 |
| | |||||
* | fixes | Amber Brown | 2018-05-22 | 1 | -2/+10 |
| | |||||
* | Merge remote-tracking branch 'origin/develop' into 3218-official-prom | Amber Brown | 2018-05-22 | 1 | -1/+5 |
|\ | |||||
* | | replacing portions | Amber Brown | 2018-05-21 | 1 | -119/+63 |
| | | |||||
* | | don't need the resource portion | Amber Brown | 2018-05-21 | 1 | -23/+0 |
| | | |||||
* | | remove old metrics libs | Amber Brown | 2018-05-21 | 2 | -450/+0 |
|/ | |||||
* | Note that label values can be anything | Erik Johnston | 2018-05-03 | 1 | -1/+2 |
| | |||||
* | Fix metrics that have integer value labels | Erik Johnston | 2018-05-03 | 1 | -1/+1 |
| | |||||
* | Make _escape_character take MatchObject | Erik Johnston | 2018-05-02 | 1 | -2/+10 |
| | |||||
* | Escape label values in prometheus metrics | Erik Johnston | 2018-05-02 | 1 | -2/+20 |
| | |||||
* | s/list/tuple | Erik Johnston | 2018-04-12 | 1 | -2/+2 |
| | |||||
* | Track last processed event received_ts | Erik Johnston | 2018-04-11 | 1 | -0/+13 |
| | |||||
* | Track where event stream processing have gotten up to | Erik Johnston | 2018-04-11 | 1 | -0/+13 |
| | |||||
* | Add GaugeMetric | Erik Johnston | 2018-04-11 | 2 | -1/+38 |
| | |||||
* | Don't disable GC when running on PyPy | Vincent Breitmoser | 2018-04-10 | 1 | -1/+7 |
| | | | | | | | | PyPy's incminimark GC can't be triggered manually. From what I observed there are no obvious issues with just letting it run normally. And unlike CPython, it actually returns unused RAM to the system. Signed-off-by: Vincent Breitmoser <look@my.amazin.horse> | ||||
* | Add a metric which increments when a request is received | Richard van der Hoff | 2018-03-09 | 1 | -0/+16 |
| | | | | | | It's useful to know when there are peaks in incoming requests - which isn't quite the same as there being peaks in outgoing responses, due to the time taken to handle requests. | ||||
* | report metrics on number of cache evictions | Richard van der Hoff | 2018-02-05 | 1 | -1/+10 |
| | |||||
* | Add some comments about the reactor tick time metric | Richard van der Hoff | 2018-01-19 | 1 | -1/+6 |
| | |||||
* | better exception logging in callbackmetrics | Richard van der Hoff | 2018-01-18 | 1 | -1/+8 |
| | | | | when we fail to render a metric, give a clue as to which metric it was | ||||
* | mechanism to render metrics with alternative names | Richard van der Hoff | 2018-01-15 | 1 | -13/+40 |
| | |||||
* | Add some comments to metrics classes | Richard van der Hoff | 2018-01-15 | 1 | -1/+27 |
| | |||||
* | Make Counter render floats | Richard van der Hoff | 2018-01-12 | 1 | -3/+10 |
| | | | | | | | | Prometheus handles all metrics as floats, and sometimes we store non-integer values in them (notably, durations in seconds), so let's render them as floats too. (Note that the standard client libraries also treat Counters as floats.) | ||||
* | Rename the python-specific metrics now the docs claim that we have done | Paul "LeoNerd" Evans | 2016-11-03 | 1 | -7/+9 |
| | |||||
* | Since we don't export per-filetype fd counts any more, delete all the code ↵ | Paul "LeoNerd" Evans | 2016-11-03 | 1 | -36/+4 |
| | | | | related to that too | ||||
* | Remove now-unused 'resource' import | Paul "LeoNerd" Evans | 2016-11-03 | 1 | -8/+0 |
| | |||||
* | Now we have new-style metrics don't bother exporting legacy-named process ones | Paul "LeoNerd" Evans | 2016-11-03 | 1 | -16/+1 |
| | |||||
* | Set up the process collector during metrics __init__; that way all ↵ | Paul "LeoNerd" Evans | 2016-10-27 | 1 | -0/+3 |
| | | | | split-process workers have it | ||||
* | Pass the Metrics group into the process collector instead of having it find ↵ | Paul "LeoNerd" Evans | 2016-10-27 | 1 | -7/+3 |
| | | | | its own one; this avoids it needing to import from synapse.metrics | ||||
* | Allow creation of a 'subspace' within a Metrics object, returning another one | Paul "LeoNerd" Evans | 2016-10-27 | 1 | -0/+3 |
| | |||||
* | Split callback metric lambda functions down onto their own lines to keep ↵ | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -8/+16 |
| | | | | line lengths under 90 | ||||
* | Adjust code for <100 char line limit | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -1/+1 |
| | |||||
* | Cut the raw /proc/self/stat line up into named fields at collection time | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -8/+22 |
| | |||||
* | Move the process metrics collector code into its own file | Paul "LeoNerd" Evans | 2016-10-19 | 2 | -141/+159 |
| | |||||
* | A slightly neater way to manage metric collector functions | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -2/+8 |
| | |||||
* | appease pep8 | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -3/+5 |
| | |||||
* | Also guard /proc/self/fds-related code with a suitable psuedoconstant | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -3/+5 |
| | |||||
* | Guard registration of process-wide metrics by existence of the requisite ↵ | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -45/+50 |
| | | | | /proc entries | ||||
* | Add standard process_start_time_seconds metric | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -0/+15 |
| | |||||
* | Add standard process_max_fds metric | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -0/+13 |
| | |||||
* | Add standard process_open_fds metric | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -20/+29 |
| | |||||
* | Add standard process_*_memory_bytes metrics | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -0/+8 |
| | |||||
* | Use /proc/self/stat to generate the new process_cpu_*_seconds_total metrics | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -4/+12 |
| | |||||
* | Export CPU usage metrics also under prometheus-standard metric name | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -0/+15 |
| | |||||
* | Callback metric values might not just be integers - allow floats | Paul "LeoNerd" Evans | 2016-10-19 | 1 | -2/+2 |
| | |||||
* | Make psutil optional | Erik Johnston | 2016-08-08 | 2 | -5/+13 |
| | |||||
* | Don't explode if we have no snapshots yet | Erik Johnston | 2016-07-20 | 1 | -0/+3 |
| | |||||
* | Add metrics for psutil derived memory usage | Erik Johnston | 2016-07-20 | 2 | -1/+46 |
| | |||||
* | Don't track total objects as its too expensive to calculate | Erik Johnston | 2016-06-07 | 1 | -1/+0 |
| | |||||
* | Record some more GC metrics | Erik Johnston | 2016-06-07 | 1 | -0/+5 |
| | |||||
* | Also record number of unreachable objects | Erik Johnston | 2016-06-07 | 1 | -2/+4 |
| | |||||
* | Change the way we do stats | Erik Johnston | 2016-06-07 | 1 | -7/+3 |
| | |||||
* | Merge pull request #771 from matrix-org/erikj/gc_tick | Erik Johnston | 2016-06-07 | 1 | -0/+26 |
|\ | | | | | Manually run GC on reactor tick. | ||||
| * | Count number of GC collects | Erik Johnston | 2016-05-16 | 1 | -5/+11 |
| | | |||||
| * | Add a comment | Erik Johnston | 2016-05-13 | 1 | -0/+5 |
| | | |||||
| * | Manually run GC on reactor tick. | Erik Johnston | 2016-05-09 | 1 | -0/+15 |
| | | | | | | | | This also adds a metric for amount of time spent in GC. | ||||
* | | Change CacheMetrics to be quicker | Erik Johnston | 2016-06-03 | 2 | -32/+28 |
|/ | | | | | | We change it so that each cache has an individual CacheMetric, instead of having one global CacheMetric. This means that when a cache tries to increment a counter it does not need to go through so many indirections. | ||||
* | copyrights | Matthew Hodgson | 2016-01-07 | 3 | -3/+3 |
| | |||||
* | Check that /proc/self/fd exists before listing it | Mark Haines | 2015-09-07 | 1 | -0/+4 |
| | |||||
* | The maxrss reported by getrusage is in kilobytes, not pages | Mark Haines | 2015-09-07 | 1 | -4/+3 |
| | |||||
* | Also check for presence of 'threadCallQueue' in reactor | Erik Johnston | 2015-08-18 | 1 | -1/+8 |
| | |||||
* | Use more helpful variable names | Erik Johnston | 2015-08-18 | 1 | -3/+3 |
| | |||||
* | Fix pending_calls metric to not lie | Erik Johnston | 2015-08-14 | 1 | -3/+18 |
| | |||||
* | Don't time getDelayedCalls | Erik Johnston | 2015-08-13 | 1 | -1/+1 |
| | |||||
* | Add some metrics about the reactor | Erik Johnston | 2015-08-13 | 1 | -0/+29 |
| | |||||
* | Appease pep8 | Paul "LeoNerd" Evans | 2015-04-01 | 1 | -0/+1 |
| | |||||
* | Report process open filehandles in metrics | Paul "LeoNerd" Evans | 2015-04-01 | 1 | -0/+34 |
| | |||||
* | Appease pyflakes | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -1/+1 |
| | |||||
* | Delete unused import of NOT_READY_YET | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -1/+0 |
| | |||||
* | Appease pep8 | Paul "LeoNerd" Evans | 2015-03-12 | 3 | -7/+9 |
| | |||||
* | Replace the @metrics.counted annotations in federation with ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -17/+0 |
| | | | | specifically-written counters and distributions | ||||
* | Add an .inc_by() method to CounterMetric; implement DistributionMetric a ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -23/+14 |
| | | | | neater way | ||||
* | Don't forbid '_' in metric basenames any more, to allow things like foo_time | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -5/+0 |
| | |||||
* | Rename TimerMetric to DistributionMetric; as it could count more than just time | Paul "LeoNerd" Evans | 2015-03-12 | 2 | -14/+18 |
| | |||||
* | Export CacheMetric as hits+total, rather than hits+misses, as it's easier to ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -5/+6 |
| | | | | derive hit ratio from that | ||||
* | Remember to emit final linefeed from /metrics page, or Prometheus gets upset | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -0/+2 |
| | |||||
* | Prometheus needs "escaped" label values | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -2/+6 |
| | |||||
* | Kill unused CounterMetric.fetch() method | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -3/+0 |
| | |||||
* | Use _ instead of . as a metric namespacing separator, for Prometheus | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -3/+11 |
| | |||||
* | Have all @metrics.counted use a single metric name vectored on the method ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -2/+9 |
| | | | | name, rather than a brand new scalar counter per counted method | ||||
* | Bugfix to rendering output of vectored TimerMetrics | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -3/+2 |
| | |||||
* | Rename Metrics' "keys" to "labels" | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -12/+12 |
| | |||||
* | Provide some process resource usage metrics | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -0/+27 |
| | |||||
* | Neater register_* methods on overall Metrics container | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -22/+12 |
| | |||||
* | Neater implementation of metric render methods by pulling out 'render' as a ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -18/+15 |
| | | | | base method that calls self.render_item | ||||
* | Initial hack at a TimerMetric; for storing counts + duration accumulators | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -0/+48 |
| | |||||
* | Ensure that /_synapse/metrics response is UTF-8 encoded | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -1/+2 |
| | |||||
* | Implement vector CallbackMetrics | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -2/+6 |
| | |||||
* | Neater introspection methods on BaseMetric so that subclasses don't need to ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -4/+11 |
| | | | | touch self.keys directly | ||||
* | Rename CacheCounterMetric to just CacheMetric; add a CallbackMetric ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 2 | -7/+12 |
| | | | | component to give the size of the cache | ||||
* | Ensure that exceptions while rendering individual metrics don't stop others ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -1/+10 |
| | | | | from being rendered anyway - especially useful for CallbackMetric | ||||
* | Initial attempt at a scalar callback-based metric to give instantaneous ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 2 | -1/+24 |
| | | | | snapshot gauges | ||||
* | Create the concept of a cachecounter metric; generating two counters ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 2 | -7/+47 |
| | | | | specific to caches | ||||
* | Have the MetricsResource actually render metric counters | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -1/+3 |
| | |||||
* | An initial implementation of a 'metrics' instance, similar to a 'logger' for ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -0/+69 |
| | | | | keeping counter stats on method calls | ||||
* | Initial tiny attempt at (vectorable) counter metrics | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -0/+54 |
| | |||||
* | A trivial 'hello world'-style resource on /_synapse/metrics, with optional ↵ | Paul "LeoNerd" Evans | 2015-03-12 | 1 | -0/+37 |
commandline flag |