pub struct DatabaseScanner { /* private fields */ }Implementations§
Source§impl DatabaseScanner
impl DatabaseScanner
Sourcepub fn create_record_batch_sink(&self, batch_size: usize) -> RecordBatchSink
pub fn create_record_batch_sink(&self, batch_size: usize) -> RecordBatchSink
Create a RecordBatchSink that pushes batches to this scanner’s tables.
The sink can be registered with hyperactor_telemetry::register_sink() to receive trace events and store them as queryable tables.
Sourcepub fn create_entity_dispatcher(&self, batch_size: usize) -> EntityDispatcher
pub fn create_entity_dispatcher(&self, batch_size: usize) -> EntityDispatcher
Create an EntityDispatcher that pushes batches to this scanner’s tables.
The dispatcher can be registered with hyperactor_telemetry::set_entity_dispatcher() to receive entity events (actors, meshes) and store them as queryable tables.
Sourcepub fn store_pyspy_dump(
&self,
dump_id: &str,
proc_ref: &str,
pyspy_result_json: &str,
) -> Result<()>
pub fn store_pyspy_dump( &self, dump_id: &str, proc_ref: &str, pyspy_result_json: &str, ) -> Result<()>
Parse a py-spy result JSON and store data in normalized py-spy tables.
Populates four tables matching the hyperactor_mesh::pyspy structs:
pyspy_dumps: one row per dumppyspy_stack_traces: one row per thread (matchesPySpyStackTrace)pyspy_frames: one row per frame (matchesPySpyFrame)pyspy_local_variables: one row per local variable (matchesPySpyLocalVariable)
Design notes:
- Non-Ok results (
BinaryNotFound,Failed) are silently dropped. We intentionally do not record them as structured telemetry today; the caller can log or count those cases if needed. dump_idis caller-provided; uniqueness is the caller’s responsibility.timestamp_usrecords ingestion time, not py-spy capture time (the py-spy JSON carries no capture timestamp).- We parse via
serde_json::Valuerather than importing the typedPySpyResultto avoid a crate dependency onhyperactor_mesh. The tradeoff is that schema drift in the py-spy structs will not be caught at compile time.
Sourcepub fn table_store(&self) -> TableStore
pub fn table_store(&self) -> TableStore
Return an opaque TableStore handle for external callers.
Trait Implementations§
Source§impl<'py> IntoPyObject<'py> for DatabaseScanner
impl<'py> IntoPyObject<'py> for DatabaseScanner
Source§type Target = DatabaseScanner
type Target = DatabaseScanner
The Python output type
Source§type Output = Bound<'py, <DatabaseScanner as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <DatabaseScanner as IntoPyObject<'py>>::Target>
The smart pointer type to use. Read more
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Performs the conversion.
Source§impl PyClass for DatabaseScanner
impl PyClass for DatabaseScanner
Source§impl PyClassImpl for DatabaseScanner
impl PyClassImpl for DatabaseScanner
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
#[pyclass(subclass)]
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
#[pyclass(extends=…)]
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
#[pyclass(mapping)]
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
#[pyclass(sequence)]
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
#[pyclass(immutable_type)]
Source§const RAW_DOC: &'static CStr = c"\x00"
const RAW_DOC: &'static CStr = c"\x00"
Docstring for the class provided on the struct or enum. Read more
Source§const DOC: &'static CStr
const DOC: &'static CStr
Fully rendered class doc, including the
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<DatabaseScanner>
type ThreadChecker = SendablePyClass<DatabaseScanner>
This handles following two situations: Read more
type Inventory = Pyo3MethodsInventoryForDatabaseScanner
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Immutable or mutable
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
The closest native ancestor. This is
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyClassNewTextSignature for DatabaseScanner
impl PyClassNewTextSignature for DatabaseScanner
const TEXT_SIGNATURE: &'static str = "(rank, batch_size=1000, retention_secs=...)"
Source§impl<'a, 'holder, 'py> PyFunctionArgument<'a, 'holder, 'py, false> for &'holder DatabaseScanner
impl<'a, 'holder, 'py> PyFunctionArgument<'a, 'holder, 'py, false> for &'holder DatabaseScanner
Source§impl<'a, 'holder, 'py> PyFunctionArgument<'a, 'holder, 'py, false> for &'holder mut DatabaseScanner
impl<'a, 'holder, 'py> PyFunctionArgument<'a, 'holder, 'py, false> for &'holder mut DatabaseScanner
Source§impl PyTypeInfo for DatabaseScanner
impl PyTypeInfo for DatabaseScanner
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
Returns the PyTypeObject instance for this type.
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
Returns the safe abstraction over the type object.
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
Checks if
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
Checks if
object is an instance of this type.impl DerefToPyAny for DatabaseScanner
Auto Trait Implementations§
impl Freeze for DatabaseScanner
impl RefUnwindSafe for DatabaseScanner
impl Send for DatabaseScanner
impl Sync for DatabaseScanner
impl Unpin for DatabaseScanner
impl UnwindSafe for DatabaseScanner
Blanket Implementations§
§impl<T> AnySync for T
impl<T> AnySync for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<A, M> Handler<IndexedErasedUnbound<M>> for A
impl<A, M> Handler<IndexedErasedUnbound<M>> for A
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoPyObjectBox for Twhere
T: for<'py> IntoPyObject<'py> + Send,
impl<T> IntoPyObjectBox for Twhere
T: for<'py> IntoPyObject<'py> + Send,
fn into_py_object(self: Box<T>, py: Python<'_>) -> Result<Py<PyAny>, PyErr>
§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
Converts
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
Converts
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
Converts
self into a Python object. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Applies the layer to a service and wraps it in [
Layered].