Skip to content

Commit

Permalink
Make timings (configuration refresh, tweet time, etc.) configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
andygrunwald committed Dec 23, 2016
1 parent c46ed4a commit c6a9625
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 28 deletions.
24 changes: 15 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,23 +43,29 @@ cd TrendingGithub-v0.3.1-linux-amd64
$ ./TrendingGithub -help
Usage of ./TrendingGithub:
-debug
Outputs the tweet instead of tweet it (useful for development). Default: false. Env var: TRENDINGGITHUB_DEBUG
Outputs the tweet instead of tweet it (useful for development). Env var: TRENDINGGITHUB_DEBUG
-storage-auth string
Storage Auth (e.g. myPassword or <empty>). Default: empty. Env var: TRENDINGGITHUB_STORAGE_AUTH
Storage Auth (e.g. myPassword or <empty>). Env var: TRENDINGGITHUB_STORAGE_AUTH
-storage-url string
Storage URL (e.g. 1.2.3.4:6379 or :6379). Default: :6379. Env var: TRENDINGGITHUB_STORAGE_URL (default ":6379")
Storage URL (e.g. 1.2.3.4:6379 or :6379). Env var: TRENDINGGITHUB_STORAGE_URL (default ":6379")
-twitter-access-token string
Twitter-API: Access token. Default: empty. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN
Twitter-API: Access token. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN
-twitter-access-token-secret string
Twitter-API: Access token secret. Default: empty. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN_SECRET
Twitter-API: Access token secret. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN_SECRET
-twitter-conf-refresh-time duration
Twitter: Time interval to refresh the configuration of twitter (e.g. char length for short url). Default: 24h. Env var: TRENDINGGITHUB_TWITTER_CONF_REFRESH_TIME (default 24h0m0s)
-twitter-consumer-key string
Twitter-API: Consumer key. Default: empty. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_KEY
Twitter-API: Consumer key. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_KEY
-twitter-consumer-secret string
Twitter-API: Consumer secret. Default: empty. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_SECRET
Twitter-API: Consumer secret. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_SECRET
-twitter-follow-new-person
Twitter: Follows a friend of one of our followers. Default: false. Env var: TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON
Twitter: Follows a friend of one of our followers. Env var: TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON
-twitter-follow-new-person-time duration
Growth hack: Time interval to search for a new person to follow. Env var: TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON_TIME (default 45m0s)
-twitter-tweet-time duration
Twitter: Time interval to search a new project and tweet it. Env var: TRENDINGGITHUB_TWITTER_TWEET_TIME (default 30m0s)
-version
Outputs the version number and exit. Default: false. Env var: TRENDINGGITHUB_VERSION
Outputs the version number and exit. Env var: TRENDINGGITHUB_VERSION
```

**Every parameter can be set by environment variable as well.**
Expand Down
33 changes: 17 additions & 16 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,28 @@ import (
const (
// Version of @TrendingGithub
Version = "0.3.1"

tweetTime = 30 * time.Minute
configurationRefreshTime = 24 * time.Hour
followNewPersonTime = 45 * time.Minute
)

func main() {
var (
// Twitter
twitterConsumerKey = flags.String("twitter-consumer-key", "TRENDINGGITHUB_TWITTER_CONSUMER_KEY", "", "Twitter-API: Consumer key. Default: empty. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_KEY")
twitterConsumerSecret = flags.String("twitter-consumer-secret", "TRENDINGGITHUB_TWITTER_CONSUMER_SECRET", "", "Twitter-API: Consumer secret. Default: empty. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_SECRET")
twitterAccessToken = flags.String("twitter-access-token", "TRENDINGGITHUB_TWITTER_ACCESS_TOKEN", "", "Twitter-API: Access token. Default: empty. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN")
twitterAccessTokenSecret = flags.String("twitter-access-token-secret", "TRENDINGGITHUB_TWITTER_ACCESS_TOKEN_SECRET", "", "Twitter-API: Access token secret. Default: empty. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN_SECRET")
twitterFollowNewPerson = flags.Bool("twitter-follow-new-person", "TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON", false, "Twitter: Follows a friend of one of our followers. Default: false. Env var: TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON")
twitterConsumerKey = flags.String("twitter-consumer-key", "TRENDINGGITHUB_TWITTER_CONSUMER_KEY", "", "Twitter-API: Consumer key. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_KEY")
twitterConsumerSecret = flags.String("twitter-consumer-secret", "TRENDINGGITHUB_TWITTER_CONSUMER_SECRET", "", "Twitter-API: Consumer secret. Env var: TRENDINGGITHUB_TWITTER_CONSUMER_SECRET")
twitterAccessToken = flags.String("twitter-access-token", "TRENDINGGITHUB_TWITTER_ACCESS_TOKEN", "", "Twitter-API: Access token. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN")
twitterAccessTokenSecret = flags.String("twitter-access-token-secret", "TRENDINGGITHUB_TWITTER_ACCESS_TOKEN_SECRET", "", "Twitter-API: Access token secret. Env var: TRENDINGGITHUB_TWITTER_ACCESS_TOKEN_SECRET")
twitterFollowNewPerson = flags.Bool("twitter-follow-new-person", "TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON", false, "Twitter: Follows a friend of one of our followers. Env var: TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON")

// Timings
tweetTime = flags.Duration("twitter-tweet-time", "TRENDINGGITHUB_TWITTER_TWEET_TIME", 30 * time.Minute, "Twitter: Time interval to search a new project and tweet it. Env var: TRENDINGGITHUB_TWITTER_TWEET_TIME")
configurationRefreshTime = flags.Duration("twitter-conf-refresh-time", "TRENDINGGITHUB_TWITTER_CONF_REFRESH_TIME", 24 * time.Hour, "Twitter: Time interval to refresh the configuration of twitter (e.g. char length for short url). Env var: TRENDINGGITHUB_TWITTER_CONF_REFRESH_TIME")
followNewPersonTime = flags.Duration("twitter-follow-new-person-time", "TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON_TIME", 45 * time.Minute, "Growth hack: Time interval to search for a new person to follow. Env var: TRENDINGGITHUB_TWITTER_FOLLOW_NEW_PERSON_TIME")

// Redis storage
storageURL = flags.String("storage-url", "TRENDINGGITHUB_STORAGE_URL", ":6379", "Storage URL (e.g. 1.2.3.4:6379 or :6379). Default: :6379. Env var: TRENDINGGITHUB_STORAGE_URL")
storageAuth = flags.String("storage-auth", "TRENDINGGITHUB_STORAGE_AUTH", "", "Storage Auth (e.g. myPassword or <empty>). Default: empty. Env var: TRENDINGGITHUB_STORAGE_AUTH")
storageURL = flags.String("storage-url", "TRENDINGGITHUB_STORAGE_URL", ":6379", "Storage URL (e.g. 1.2.3.4:6379 or :6379). Env var: TRENDINGGITHUB_STORAGE_URL")
storageAuth = flags.String("storage-auth", "TRENDINGGITHUB_STORAGE_AUTH", "", "Storage Auth (e.g. myPassword or <empty>). Env var: TRENDINGGITHUB_STORAGE_AUTH")

showVersion = flags.Bool("version", "TRENDINGGITHUB_VERSION", false, "Outputs the version number and exit. Default: false. Env var: TRENDINGGITHUB_VERSION")
debugMode = flags.Bool("debug", "TRENDINGGITHUB_DEBUG", false, "Outputs the tweet instead of tweet it (useful for development). Default: false. Env var: TRENDINGGITHUB_DEBUG")
showVersion = flags.Bool("version", "TRENDINGGITHUB_VERSION", false, "Outputs the version number and exit. Env var: TRENDINGGITHUB_VERSION")
debugMode = flags.Bool("debug", "TRENDINGGITHUB_DEBUG", false, "Outputs the tweet instead of tweet it (useful for development). Env var: TRENDINGGITHUB_DEBUG")
)
flag.Parse()

Expand All @@ -59,19 +60,19 @@ func main() {
}
}

twitterClient.SetupConfigurationRefresh(configurationRefreshTime)
twitterClient.SetupConfigurationRefresh(*configurationRefreshTime)

// Activate our growth hack feature
// Checkout the README for details or read the code (suggested).
if *twitterFollowNewPerson {
log.Println("Growth hack \"Follow a friend of a friend\" activated")
twitterClient.SetupFollowNewPeopleScheduling(followNewPersonTime)
twitterClient.SetupFollowNewPeopleScheduling(*followNewPersonTime)
}

// Request a storage backend
storageBackend := storage.NewBackend(*storageURL, *storageAuth, *debugMode)
defer storageBackend.Close()

// Let the party begin
StartTweeting(twitterClient, storageBackend)
StartTweeting(twitterClient, storageBackend, *tweetTime)
}
6 changes: 3 additions & 3 deletions tweets.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ func (ts *TweetSearch) MarkTweetAsAlreadyTweeted(projectName string) (bool, erro
// It schedules the times when we are looking for a new project to tweet.
// If we found a project, we will build the tweet and tweet it to our followers.
// Because we love our followers ;)
func StartTweeting(twitter *twitter.Twitter, storageBackend storage.Pool) {
func StartTweeting(twitter *twitter.Twitter, storageBackend storage.Pool, tweetTime time.Duration) {

// Setup tweet scheduling
ts := &TweetSearch{
Expand All @@ -255,7 +255,7 @@ func StartTweeting(twitter *twitter.Twitter, storageBackend storage.Pool) {
Storage: storageBackend,
URLLength: twitter.Configuration.ShortUrlLengthHttps,
}
SetupRegularTweetSearchProcess(ts)
SetupRegularTweetSearchProcess(ts, tweetTime)

// Waiting for tweets ...
for tweet := range ts.Channel {
Expand Down Expand Up @@ -292,7 +292,7 @@ func StartTweeting(twitter *twitter.Twitter, storageBackend storage.Pool) {

// SetupRegularTweetSearchProcess is the time ticker to search a new project and
// tweet it in a specific time interval.
func SetupRegularTweetSearchProcess(tweetSearch *TweetSearch) {
func SetupRegularTweetSearchProcess(tweetSearch *TweetSearch, tweetTime time.Duration) {
go func() {
for range time.Tick(tweetTime) {
go tweetSearch.GenerateNewTweet()
Expand Down

0 comments on commit c6a9625

Please sign in to comment.