Skip to main content

SDK for writing lookout analyzers

Project description

lookout-sdk GitHub version PyPI version Build Status GoDoc

Toolkit for writing new analyzers for source{d} Lookout.

What Does the SDK Provide?

For the complete documentation of source{d} Lookout, please take a look at https://docs.sourced.tech/lookout.

For detailed information about the different parts of Lookout, and how they interact you can go to the Lookout architecture guide.

lookout-sdk provides:

  • proto definitions.
  • pre-generated libraries for Golang and Python, offering:
    • an easy access to the DataService API though a gRPC service. Lookout will take care of dealing with Git repositories, UAST extraction, programming language detection, etc.
    • low-level helpers to work around some protobuf/gRPC caveats.
  • quickstart examples of an Analyzer that detects language and number of functions (written in Go and in Python).

Caveats

For the gRPC client and server please follow these requirements:

  • set a common maximum gRPC message size in gRPC servers and clients. This is required to avoid hitting different gRPC limits when handling UASTs, that can be huge —see grpc/grpc#7927—. To do so use the included helpers in lookout-sdk:
    • go: using pb.NewServer and pb.DialContext.
    • python: using lookout.sdk.grpc.create_server and lookout.sdk.grpc.create_channel.
  • support RFC 3986 URI scheme; lookout-sdk includes helpers for this:
    • go: using pb.ToGoGrpcAddress and pb.Listen.
    • python: using lookout.sdk.grpc.to_grpc_address.
  • use insecure connection:
    • currently lookout expects to use insecure gRPC connections, as provided by pb.DialContext
    • python: run server using server.add_insecure_port(address) (example).

DataService

When DataService is being dialed, you should:

  • turn on gRPC Wait for Ready mode if your analyzer creates a connection to DataServer before it was actually started. This way the RPCs are queued until the chanel is ready:
  • golang: reset connection backoff to DataServer on event: if you keep the connection to DataServer open you need to reset the backoff when your analyzer receives a new event. Use the conn.ResetConnectBackoff method in your event handlers. It's needed to avoid broken connections after a lookoutd redeployment. In case of a long restart of lookoutd gRPC server, the backoff timeout may increase so much that the analyzer will not be able to reconnect before it makes the new request to DataServer.

Contributing

Contributions are welcome and very much appreciated 🙌

Please refer to our Contribution Guide for more details.

Community

source{d} has an amazing community of developers and contributors who are interested in Code As Data and/or Machine Learning on Code. Please join us! 👋

Code of Conduct

All activities under source{d} projects are governed by the source{d} code of conduct.

License

Apache License Version 2.0, see LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lookout-sdk-0.6.3.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

lookout_sdk-0.6.3-py3-none-any.whl (26.2 kB view details)

Uploaded Python 3

File details

Details for the file lookout-sdk-0.6.3.tar.gz.

File metadata

  • Download URL: lookout-sdk-0.6.3.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7

File hashes

Hashes for lookout-sdk-0.6.3.tar.gz
Algorithm Hash digest
SHA256 175304719f5e37666073ec0989700a73ad7d2d65cdd91962d474468ac222e252
MD5 f7e0fe849df81ff68adde507ba438486
BLAKE2b-256 a5911f279f7ee50941458d006094446414e63076b0e5b637b74b9c9f5e909580

See more details on using hashes here.

File details

Details for the file lookout_sdk-0.6.3-py3-none-any.whl.

File metadata

  • Download URL: lookout_sdk-0.6.3-py3-none-any.whl
  • Upload date:
  • Size: 26.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7

File hashes

Hashes for lookout_sdk-0.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3e775ff0c4142fefe14658c32244bb54b020000cee6a18e343b621e23093068a
MD5 2a4c307ebf2150b2213b7ee7f54a9f4b
BLAKE2b-256 8dacbb5477474a8374ec10c7d1326610df10d422add2cfaa26def9479098d397

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page