Skip to content

Instantly share code, notes, and snippets.

View crrobinson14's full-sized avatar

Chad Robinson crrobinson14

View GitHub Profile
@crrobinson14
crrobinson14 / initializer.js
Created February 16, 2018 19:34
Clean old workers and tasks
module.exports = {
start: function(_api, next) {
var maxWorkerAge = 10000;
api.log('Removing stuck workers older than ' + maxWorkerAge + 'ms', 'info');
api.resque.queue.cleanOldWorkers(maxWorkerAge, function(err, result) {
if (err) {
api.log(err, 'error');
}
if (Object.keys(result).length > 0) {
api.log('Removed stuck workers with errors: ', 'info', result);
const Redis = require('redis');
const Config = require('./config.js');
const Log = require('./log.js');
let redisClient = Redis.createClient(Config.redis.uri);
// Locking utility function. This is based on https://github.com/errorception/redis-lock but we only needed a simple use-case of it,
// and redis-lock continually retries - we wanted to fail immediately if a lock was in use.
class Lock {
FROM node:8.6.0
#USER node
# Deal with node-gyp permissions issues in Docker
RUN npm -g config set user root
RUN mkdir /root/.npm-global
ENV PATH=/root/.npm-global/bin:$PATH
ENV NPM_CONFIG_PREFIX=/root/.npm-global
# Base tools
v8.6.0
5.3.0
[email protected] /Users/chad/projects/paltalk/webng/chat
├─┬ @webng/[email protected]
│ └── @webng/[email protected] deduped
├─┬ @webng/[email protected]
│ ├── [email protected] deduped
│ └── [email protected] deduped
├─┬ @webng/[email protected]
│ ├─┬ [email protected]
@crrobinson14
crrobinson14 / firebase-backup.sh
Created August 1, 2017 00:54
Firebase Realtime Database Backup Script
#!/usr/bin/env bash
# This script uses a shallow-get technique to get a list of all top level keys
# in a Firebase Realtime Database, then extract the tree under each key into a
# separate JSON file, one per top level key.
#
# It’s great for making backups because you don’t end up with one ginormous
# export file which is really hard to manage with other tools.
#
# It can also immediately give you a sense of where your space is going per key,
@crrobinson14
crrobinson14 / bootstrap.js
Last active March 1, 2017 00:19
ActionHero + Mocha test/ subfolder support files.
// Set NODE_ENV to test so AH creates api.specHelper for us
process.env.NODE_ENV = 'test';
process.env.ACTIONHERO_CONFIG = 'config,local-config';
// Get ActionHero ready to go
var actionheroPrototype = require('actionhero').actionheroPrototype,
actionhero = new actionheroPrototype(),
running = false;
global.api = null;
@crrobinson14
crrobinson14 / session.js
Created February 3, 2017 03:27
ActionHero JWT-oriented Session Middleware
let Promise = require('bluebird'),
pbkdf2 = require('pbkdf2'),
jwt = require('jsonwebtoken'),
encryptionIterations = 10000,
publicApi = {},
api;
/**
* This is an example, but fully functional, session middleware for ActionHero.
* It's based on three design principles:
var pendingNotifications = {},
publicApi = {},
api;
// Dummy function to avoid an Unhandled Rejection error if the user is offline. Prevents us
// from needing to .catch() the notification result in every spot where we call it. Also a
// useful debugging point, so we don't just null it out.
function userNotOnline() {
}
@crrobinson14
crrobinson14 / bootstrap.js
Last active July 12, 2016 14:56
ActionHero testing support files
// Set NODE_ENV to test so AH creates api.specHelper for us
process.env.NODE_ENV = 'test';
process.env.ACTIONHERO_CONFIG = 'config,local-config';
// Get ActionHero ready to go
var actionheroPrototype = require('actionhero').actionheroPrototype,
actionhero = new actionheroPrototype(),
running = false;
global.api = null;
// NOTE: Gist doesn't allow subdir names. This would be in migrations/
module.exports = {
description: 'Migration 00047: Sample migration file',
// Make the appropriate updates
up: function(orm, DataTypes, queryInterface) {
return orm.Promise.all([
queryInterface.addColumn('mytable', 'myField', { type: DataTypes.DATE }),
queryInterface.addColumn('mytable', 'myField2', { type: DataTypes.INTEGER, defaultValue: 0 })
]);