Skip to content

Instantly share code, notes, and snippets.

View sb8244's full-sized avatar

Stephen Bussey sb8244

View GitHub Profile
@sb8244
sb8244 / feed_item_flow.ex
Created May 7, 2018 16:33
Anonymized producer/consumer for triggering events from a controller
defmodule FeedItemProducer do
use GenStage
def start_link(:nameless) do
GenStage.start_link(__MODULE__, :ok)
end
def start_link() do
GenStage.start_link(__MODULE__, :ok, name: __MODULE__)
end
@sb8244
sb8244 / caching.ex
Last active February 26, 2024 16:09
Local/Distributed Caching
defmodule MyApp.AccountLookup.Cache do
@moduledoc """
Provides a cache that can be used for account lookups. This cache is backed by
Cachex for local storage and pg2 for remote distribution. Keys are set to expire
after 7-10 days (randomly distributed) in order to prevent stale data in our cache
over a long time period.
"""
use Cachex.DistributedCache
@sb8244
sb8244 / cluster_loader_balancer.ex
Created July 30, 2019 19:59
ClusterLoadBalancer for balancing anything (WebSocket) across a cluster
# We use this ClusterLoadBalancer to prevent hot nodes in our load balanced setup.
# The WebSockets are provided by Phoenix through the PushEx application https://github.com/pushex-project/pushex/
# The load balancer's `Worker` module is where the bulk of the cluster orchestration happens, using pg2 for cross node communication
defmodule ClusterLoadBalancer.Behavior do
@moduledoc """
Behavior for implementing a ClusterLoadBalancer compatible tool.
"""
@callback count() :: number
import { Pushex } from 'pushex'
import { getToken } from './tokenService'
const pushexOptions = {
getParams: () => getToken().then(({ token }) => Promise.resolve({ token })),
onConnectionError: pushex => {
pushex.resetParams()
},
}
defmodule SteveTrollsElixir.Private do
defmacro __using__(_) do
quote do
import unquote(__MODULE__)
@on_definition {unquote(__MODULE__), :on_priv_def}
end
end
defmacro private() do
quote do
@sb8244
sb8244 / contentful-import.json
Last active November 12, 2021 22:28
Clove Contentful Types https://cloveapp.io
{
"contentTypes": [
{
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "hq8sy8wk8n0y"
}
defmodule TestRouter do
def build(routes) do
contents =
quote do
use Plug.Router
plug :match
plug :dispatch
Enum.map(unquote(Macro.escape(routes)), fn %{match: match, assign: assign} ->
{% if user %}
<script>
window.intercomSettings = {
app_id: "YOUR_APP_ID",
user_id: "{{ user.id }}",
email: "{{ user.email }}",
user_hash: "{{ user.id | encrypt: "hmac", "YOUR_IDENTITY_VERIFICATION_SECRET" }}"
};
</script>
{% else %}
<script type="text/javascript">
if (window.top !== window.self) {
const msg = {
urlChange: {
pathname: window.location.pathname,
search: window.location.search,
href: window.location.href
}
}
window.top.postMessage(msg, '*')
<!-- Note: un-minified source code available at clove-embed.js -->
<script type="text/javascript" src="https://public-cdn.cloveapp.io/clove-embed.min.js"></script>
<script type="text/javascript">
CloveEmbed.installFrameListener()
CloveEmbed.setFrameUrl("https://yourhub.example.com")
</script>