What was in my variables when the exception was thrown?Takipi captures all the relevant variable and object values for any exception thrown anywhere within your app, so you no longer have to stare at call stacks and guess which values were there.
Where was this value assigned?Takipi shows you all the methods in which variables causing the exception were previously assigned - even values assigned across multiple threads.
How did this variable end up with that value?Takipi analyzes which variable values and conditions in your code are causing an exception and automatically logs and collects those values for you so you can see how they got their values.
"I've seen this exception before..."Takipi collects just the right amount of samples you need to debug an exception, latency or breakpoint across multiple machines - without overloading you with data or slowing down your app.
How did we do today?Takipi gathers all the events of the last day into a short email digest, highlighting what's new and what's frequent - helping you stay on top of your code in staging and production.
- Exception data and code are encrypted on your server using a 256 bit AES cipher.
- Your data can only be decrypted using a set of private AES keys issued to you that are never stored by Takipi.
Takipi was built with extensive emphasis on the security of your application's data and code.
All data produced by Takipi on your server is encrypted using an AES-256 cipher. Your data can only be decrypted using a set of private AES keys issued to you during installation. These keys are never stored on Takipi's servers and are only available to you. This mode is similar to SSH key-pair authentication used to connect to Linux servers and by SSL/TLS encryption.
Data and Code Encryption
When an exception occurs within your app, Takipi collects the most relevant object and variable data which triggered the exception. This data is encrypted by your server using your installed AES secret key before it is sent to Takipi. Any data produced by your server can only be decrypted by you with your secret key. This includes both values collected at the moment of exception and decompiled source code on which the data is shown. Your data is only decrypted in your web browser when you enter your secret key. Your AES key is only stored on your server and web browser. You can generate AES keys privately here.
To collect the most relevant object and variable data, Takipi performs a set of graph analyses to identify the most relevant variables and conditions triggering an exception within your app. As your application loads Java/Scala bytecode into the JVM, Takipi converts this bytecode into an abstract graph structure which does not contain symbols, values or operators. This data structure is used to index and analyze runtime exceptions and compile breakpoints you set.
Takipi removes all jar, package, class, field, method and variable names (for both your code and any Java or 3rd party frameworks). Takipi also removes all logical and numeric operators, number and string constants and code attributes. The resulting graph cannot be used to reverse-engineer or reveal application logic.
- Takipi was built to run under extreme performance restrictions in production and staging.
- You can directly control Takipi's CPU + RAM overhead. Our goal is to help you debug systems at scale - without slowing them or you down.
Here's how Takipi works -
Takipi indexes and queries your code graph in the cloud to log only the most relevant variables and conditions (e.g. "log only when this variable is assigned null") triggering an exception - offloading this work from your servers.
Takipi dynamically generates custom algorithms to compress and log data for each exception in your app to get 10x faster logging compared to standard Java file logging.
Takipi doesn't perform any IO calls (disk or network) from within your process. Data is placed directly in shared memory and is asynchronously encrypted and sent to Takipi's servers by a daemon process.
CPU & RAM
Takipi lets you dynamically control logging frequency to a CPU/RAM cap you select (between 2-5%) directly from the app's 'Servers' dialog.
Since Takipi only collects data directly related to an exception or breakpoint when they occur, it doesn't have to continuously upload data from your servers - keeping bandwidth use to a minimum.
Takipi hard-limits the number of exceptions and breakpoints it collects at any given time to support even your most extreme performance peaks.
Takipi's JVM agent is written in native C++ and Assembly and does not allocate Java objects or captures any reference to your own - helping ensure zero impact on your GC.