Skip to content

Instantly share code, notes, and snippets.

View shiftyp's full-sized avatar

Ryan Kahn shiftyp

View GitHub Profile
@shiftyp
shiftyp / incident.md
Last active May 27, 2025 01:40
Incident Report generated from the otel-mcp-server from the Open Telemetry Demo App in Windsurf using Claude 3.7 Sonnet

Incident Report: OpenTelemetry Demo System Outage

1. Executive Summary

The OpenTelemetry Demo system is experiencing multiple cascading failures across several microservices. The issues appear to have started around 2025-05-27T00:06:00Z when the system was deployed or restarted. The primary symptoms include load generator errors, service connectivity issues, and potential performance degradation across multiple services.

2. Incident Analysis

2.1 Timeline of Events

Incident Report: 2025-05-25

Executive Summary

During the past 24 hours, several incidents were detected in the OpenTelemetry Demo application. Analysis of telemetry data reveals three primary incidents:

  1. Product Catalog Service Failures: Feature flag-induced errors in the product-catalog service
  2. Load Generator Connection Issues: Multiple errors in the load-generator service, including export failures and browser context errors
  3. Performance Degradation: Significant latency spikes detected across multiple services
@shiftyp
shiftyp / holidayconifer.ts
Last active December 14, 2024 15:48
holidayconifer.ts
import { Console } from "node:console";
const BALL = '⏺'
const COLOR = {
'blue': '\\033[94m',
'yellow': '\\033[93m',
'cyan': '\\033[96m',
'green': '\\033[92m',
'magenta': '\\033[95m',
'white': '\\033[97m',
const div = document.createElement('div')
const input = document.createElement('input')
input.setAttribute('type', 'text')
input.addEventListener('change', (e) => {
if (text === '') {
return updateDiv({ text, className: 'hidden'})
}
@shiftyp
shiftyp / README.md
Last active September 30, 2022 10:26
OOP Quiz App

OOP and MVC

What and Why

One of the big leaps you'll have to make as a JavaScript developer is wrapping your head around Object Oriented Programming (OOP). This is tough, and that's ok because it's tough for everyone at first. When you start out with JavaScript you're taught to use functions as your primary way of organizing your code. This is fine, but you'll probably find that organizing your code around objects makes larger projects easier to accomplish and improve / maintain.

The cool thing is that what OOP amounts to is an organizational strategy. I have a set of related tasks, how do I go about starting the project and organizing my code? These tasks have some variables and functions that are used to accomplish them, so you create them and write the logic for them to interact. While you can write those out as detached functions and variables, making those variables and functions into properties and methods of an object can make the division between those tasks easier to see and maintain.

Maint

@shiftyp
shiftyp / womp-womp.ts
Last active December 8, 2020 01:02
Unfortunate TypeScript error
interface RefHandles {
scrollToIntent: HTMLElement['scrollTo'];
}
const targetElement = document.createElement('div');
const handles: RefHandles = {
scrollToIntent(...args: any[]) {
targetElement.scrollTo(...args);
}
@shiftyp
shiftyp / state.js
Created November 28, 2020 17:38
State!
let state = 1
const update = (value) => {
state = value
document.innerHTML = Array(value % 4).fill('Hello')
}
setInterval(() => update(Date.now()), 1000)
@shiftyp
shiftyp / index.html
Last active November 23, 2020 14:36
Document Object Example
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Page</title>
<style>
li { cursor: pointer }
</style>
<!--
The first place JS and HTML intersect is a script tag
@shiftyp
shiftyp / example.tsx
Last active August 22, 2020 17:01
objects 0.2.0 example
import React from 'react'
import { useStable, useWatch } from '@objects/hooks'
import { through, map, debounce } from '@objects/operators'
interface Search {
title: string
}
interface Data {
@shiftyp
shiftyp / example.js
Last active July 29, 2020 18:22
Alternative Wicked API
wickedElements.define('.my-counter', (element, { events, changes, values }) => {
const counter = element.querySelector('.count')
const minus = element.querySelector('.minus')
const plus = element.querySelector('.plus')
changes(values).count(count => {
counter.textContent = count
})
values.count = 0