prometheus/pkg/textparse
beorn7 5de2df752f Hacky implementation of protobuf parsing
This "brings back" protobuf parsing, with the only goal to play with
the new sparse histograms.

The Prom-2.x style parser is highly adapted to the structure of the
Prometheus text format (and later OpenMetrics). Some jumping through
hoops is required to feed protobuf into it.

This is not meant to be a model for the final implementation. It
should just enable sparse histogram ingestion at a reasonable
efficiency.

Following known shortcomings and flaws:

- No tests yet.

- Summaries and legacy histograms, i.e. without sparse buckets, are
  ignored.

- Staleness doesn't work (but this could be fixed in the appender, to
  be discussed).

- No tricks have been tried that would be similar to the tricks the
  text parsers do (like direct pointers into the HTTP response
  body). That makes things weird here. Tricky optimizations only make
  sense once the final format is specified, which will almost
  certainly not be the old protobuf format. (Interestingly, I expect
  this implementation to be in fact much more efficient than the
  original protobuf ingestion in Prom-1.x.)

- This is using a proto3 version of metrics.proto (mostly to be
  consistent with the other protobuf uses). However, proto3 sees no
  difference between an unset field. We depend on that to distinguish
  between an unset timestamp and the timestamp 0 (1970-01-01, 00:00:00
  UTC). In this experimental code, we just assume that timestamp is
  never specified and therefore a timestamp of 0 always is interpreted
  as "not set".

Signed-off-by: beorn7 <beorn@grafana.com>
2021-07-01 01:35:11 +02:00
..
interface.go Hacky implementation of protobuf parsing 2021-07-01 01:35:11 +02:00
openmetricslex.l Fix golint issues. 2020-03-23 20:38:43 +01:00
openmetricslex.l.go Fix golint issues. 2020-03-23 20:38:43 +01:00
openmetricsparse.go Hacky implementation of protobuf parsing 2021-07-01 01:35:11 +02:00
openmetricsparse_test.go Add circular in-memory exemplars storage (#6635) 2021-03-16 15:17:45 +05:30
promlex.l Prepare for multiple text formats 2018-10-18 13:58:00 +01:00
promlex.l.go Add exemplar support to the openmetrics parser (#6292) 2019-11-19 09:33:30 +00:00
promparse.go Hacky implementation of protobuf parsing 2021-07-01 01:35:11 +02:00
promparse_test.go Testify: move to require (#8122) 2020-10-29 09:43:23 +00:00
promtestdata.nometa.txt Add an OpenMetrics parser. 2018-10-18 13:58:00 +01:00
promtestdata.txt Add an OpenMetrics parser. 2018-10-18 13:58:00 +01:00
protobufparse.go Hacky implementation of protobuf parsing 2021-07-01 01:35:11 +02:00
README.md Add a README.md to textparse package about how to update lexers. 2019-10-23 23:55:42 -07:00

Making changes to textparse lexers

In the rare case that you need to update the textparse lexers, edit promlex.l or openmetricslex.l and then run the following command: golex -o=promlex.l.go promlex.l

Note that you need golex installed: go get -u modernc.org/golex