Skip to content

Instantly share code, notes, and snippets.

@tangoslee
tangoslee / LaravelCompositeKeyExample.php
Last active January 11, 2023 02:53
Laravel relation with composite key
public function account(): BelongsTo
{
return new BelongsTo(
Account::where('owner_id', $this->owner_id),
$this,
'owner_type',
'owner_type',
'BelongsToWithCompositeKey'
);
}
@tangoslee
tangoslee / cw_mysq_stat.sh
Created September 8, 2022 18:15
[AWS] Simple MySQL connection monitoring for CloudWatch
#!/bin/sh
MYSQL="mysql"
max_connections=$(mysql -e "show variables like 'max_connections'" 2>/dev/null | grep -i "max_connections" | awk '{print $2}')
threads_connected=$(mysqladmin extended-status | grep -i 'threads_connected' | awk '{ print $4}')
cdate=$(date -u +%Y-%m-%dT%H:%M:00.000Z)
instanceid="${INSTANCE_ID}"
aws cloudwatch put-metric-data --metric-name MySQLMaxConnections --namespace "CustomMySQLMetrics" --dimensions="InstanceId=$instanceid" --value $max_connections --timestamp $cdate
@tangoslee
tangoslee / git_bash_setup.sh
Created August 31, 2022 18:19
git for bash
#!/bin/sh
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -O ~/.git-completion.bash
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh
cat<<EOF >> ~/.bashrc
source ~/.git-completion.bash
source ~/.git-prompt.sh
export CLICOLOR=1
@tangoslee
tangoslee / CompanyControllerTest.php
Last active April 12, 2022 02:58
Laravel Send Notification to Multiple Emails
$tpAdmins = [
$user1->email => $user1->email,
$user2->email => $user2->email,
];
Notification::assertSentTo(
new AnonymousNotifiable(),
CompanyRegisteredNotification::class,
function ($notification, $channels, $notifiable) use ($tpAdmins) {
return $notifiable->routes['mail'] === $tpAdmins;
@tangoslee
tangoslee / Markdown.vue
Created September 7, 2020 09:12
A way to return Vue component programmatically
const vueComponent = (component, propsData, uid = uuid.v1()) => {
// https://css-tricks.com/creating-vue-js-component-instances-programmatically/
const ComponentClass = Vue.extend(component)
const instance = new ComponentClass({ propsData })
instance.$mount()
const id = `tmp-${uid}`
window.setTimeout(() => {
// Replace dom
const old = document.querySelector(`#${id}`)
@tangoslee
tangoslee / proc_mem.sh
Created August 27, 2020 18:06
Average Memory Usage of some process
#!/bin/bash
#ps --no-headers -o "rss,cmd" -C php-fpm7.4 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"MB") }'
function chk() {
name="$1"
val=$(ps --no-headers -o "rss,cmd" -C "$name" | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"MB") }')
printf " %10s |" $val
}
function header() {
@tangoslee
tangoslee / database.php
Created August 11, 2020 15:54
Laravel MySQL Stream Connection
'mysql_stream' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
@tangoslee
tangoslee / Nginx_Dynamic_Root_by_Cookie.md
Last active July 22, 2020 00:07
[Nginx] Dynamic document root using cookie
<template>
<div>
<nav :id="id">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" v-for="({id:tabId, name}) in tabs" :key="tabId">
<a class="nav-link" :class="activated(tabId)" role="tab" :aria-controls="tabId" :aria-selected="activated(tabId)"
:href="hrefTag(tabId)" @click.prevent="setNavTab(tabId)">
{{name}}
</a>
@tangoslee
tangoslee / laravel_redis_replication.md
Last active June 5, 2020 13:54
Laravel redis configuration for AWS ElastiCache Redis Replication

database.php

'redis' => [
    'client' => env('REDIS_CLIENT', 'predis'),

    'options' => [
        'replication' => (bool) env('REDIS_REPLICA', '')
    ],