Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/googlecloudplatform/pulltop
A CLI Pub/Sub subscriber and console message logger
https://github.com/googlecloudplatform/pulltop
asynchronous cloud-computing google-cloud google-cloud-platform messaging pubsub subscriber
Last synced: about 1 month ago
JSON representation
A CLI Pub/Sub subscriber and console message logger
- Host: GitHub
- URL: https://github.com/googlecloudplatform/pulltop
- Owner: GoogleCloudPlatform
- License: apache-2.0
- Archived: true
- Created: 2020-11-06T14:09:41.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2020-11-24T13:36:46.000Z (almost 4 years ago)
- Last Synced: 2024-01-26T13:40:43.177Z (9 months ago)
- Topics: asynchronous, cloud-computing, google-cloud, google-cloud-platform, messaging, pubsub, subscriber
- Language: JavaScript
- Homepage:
- Size: 27.3 KB
- Stars: 6
- Watchers: 5
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# `pulltop`
`pulltop` is a CLI Pub/Sub subscriber and console logger for topics with text-based message payloads.
## Synopsis
Usage: `pulltop [-m ] [-d ] `
```
$ pulltop projects/pubsub-public-data/topics/taxirides-realtime
{"ride_id":"d3dc1ed1-da73-4ff7-b459-1d384a2c357b","point_idx":176,"latitude":40.748270000000005,"longitude":-74.00376,"timestamp":"2020-10-19T20:41:55.23468-04:00","meter_reading":4.6102653,"meter_increment":0.02619469,"ride_status":"enroute","passenger_count":1}
{"ride_id":"062364d6-89ab-450f-97cd-dffc0d26c20a","point_idx":749,"latitude":40.733830000000005,"longitude":-73.98851,"timestamp":"2020-10-19T20:41:55.23515-04:00","meter_reading":15.112176,"meter_increment":0.02017647,"ride_status":"enroute","passenger_count":1}
{"ride_id":"d1eb9b0b-7639-41bb-a8ef-e0d628bd828b","point_idx":113,"latitude":40.76498,"longitude":-73.98416,"timestamp":"2020-10-19T20:41:55.23564-04:00","meter_reading":5.461667,"meter_increment":0.048333336,"ride_status":"enroute","passenger_count":2}
{"ride_id":"9fe2f0b2-689c-4295-ae10-75f544a1d595","point_idx":1002,"latitude":40.759640000000005,"longitude":-73.95788,"timestamp":"2020-10-19T20:41:55.23296-04:00","meter_reading":21.484406,"meter_increment":0.021441523,"ride_status":"enroute","passenger_count":6}
{"ride_id":"478f0e32-ec35-4ef1-b407-7be1723492a2","point_idx":16,"latitude":40.76003,"longitude":-73.9915,"timestamp":"2020-10-19T20:41:55.23319-04:00","meter_reading":0.7529412,"meter_increment":0.047058824,"ride_status":"enroute","passenger_count":1}
{"ride_id":"486976c7-6b33-4285-86af-81acb9657fc2","point_idx":611,"latitude":40.73969,"longitude":-73.97296,"timestamp":"2020-10-19T20:41:55.23328-04:00","meter_reading":16.896093,"meter_increment":0.02765318,"ride_status":"enroute","passenger_count":2}
{"ride_id":"a926e22e-ade3-4fb8-8fa4-0fa16f0eae54","point_idx":72,"latitude":40.78539000000001,"longitude":-73.98363,"timestamp":"2020-10-19T20:41:55.23599-04:00","meter_reading":1.7949579,"meter_increment":0.02492997,"ride_status":"enroute","passenger_count":1}
{"ride_id":"40f87cac-9c9d-4e45-a8a8-9b69b6488ce2","point_idx":2015,"latitude":40.730290000000004,"longitude":-73.91291000000001,"timestamp":"2020-10-19T20:41:55.23738-04:00","meter_reading":40.031425,"meter_increment":0.019866712,"ride_status":"enroute","passenger_count":2}
...
```Use with other CLI tools:
```
$ pulltop projects/pubsub-public-data/topics/taxirides-realtime | jq .ride_id > /var/tmp/ride_ids.log
^C
$ head /var/tmp/ride_ids.log
"894dee5a-f6ae-4611-835a-233f79605543"
"4d1813d7-2656-49c8-8d7a-0a47ae33dc2c"
"10a15463-2a53-4345-9d91-5b1e4856920b"
"d10506fa-32ad-4366-af51-5002f247df02"
"e5060472-d5c7-484d-b3e1-349c41714678"
"e214f50e-5626-4df8-92ea-2aba709779d3"
"f8dd1f8a-9d79-4447-9f6c-bd27ddf6b194"
"9c5fc757-c531-4ce7-af06-9e8b8763880a"
"2d8f1d3e-a131-493d-be56-782b22332045"
"358a2f15-e52f-4420-8af0-5d08d487ec58"
```Format for friendlier visual output:
```
$ pulltop projects/pubsub-public-data/topics/taxirides-realtime | jq
{
"ride_id": "aafbd11f-f257-48f9-8ade-da0f7a9e47a4",
"point_idx": 356,
"latitude": 40.757600000000004,
"longitude": -73.99695000000001,
"timestamp": "2020-11-05T15:06:30.88008-05:00",
"meter_reading": 10.380789,
"meter_increment": 0.02915952,
"ride_status": "enroute",
"passenger_count": 1
}
{
"ride_id": "951e69b5-2ad3-49b1-904d-ab7524e3b7a4",
"point_idx": 1475,
"latitude": 40.742520000000006,
"longitude": -73.99952,
"timestamp": "2020-11-05T15:06:32.02742-05:00",
"meter_reading": 22.625082,
"meter_increment": 0.015339038,
"ride_status": "enroute",
"passenger_count": 1
}
{
"ride_id": "bac66af3-8340-459d-a375-1c8dfed69883",
"point_idx": 325,
"latitude": 40.766540000000006,
"longitude": -73.99683,
"timestamp": "2020-11-05T15:06:31.77781-05:00",
"meter_reading": 10.010292,
"meter_increment": 0.0308009,
"ride_status": "enroute",
"passenger_count": 1
}
...
^C
```## Installation
`npm install -g pulltop`
## Design
`pulltop` creates a subscription as needed to receive messages from a topic. It aspires to delete the subscription upon termination of its CLI process, but if shutdown uncleanly it *will* leave orphaned subscriptions. Depending on how `pulltop` is employed, this could accumulate orphaned subscriptions that consume unnecessary quota if not periodically maintained.
`pulltop` acknowledges messages it receives over the subscription,
but since a new subscription is created by pulltop upon instantiation,
it cannot interfere with the acknowledgement of messages destined for
other subscriptions on the specified topic.## See also
`pulltop` is used (alongside `websocketd`) to [Stream Pub/Sub messages over Websockets](https://cloud.google.com/solutions/streaming-cloud-pub-sub-messages-over-websockets) and in the package [gke-pubsub-websocket-adapter](https://github.com/GoogleCloudPlatform/gke-pubsub-websocket-adapter).
## Disclaimers
_This is not an officially supported Google product._
`pulltop` is under active development. Interfaces and functionality may change at any time.
## License
This repository is licensed under the Apache 2 license (see [LICENSE](LICENSE.txt)).
Contributions are welcome. See [CONTRIBUTING](CONTRIBUTING.md) for more information.