Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .docker/Dockerfile
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,15 +6,23 @@ RUN apt-get update && \
apt-get install -y python3 python3-pip git && \
rm -rf /var/lib/apt/lists/*

# Install requirements
COPY requirements.txt /workspace/requirements.txt
RUN pip install --no-cache-dir -r /workspace/requirements.txt

# Set working directory
WORKDIR /workspace

# Ensure Python can import from this path
#ENV PYTHONPATH=/workspace/src
ENV PYTHONPATH=/workspace:/workspace/src


# Copy the entrypoint from the .docker folder into the image
COPY .docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/use/local/bin/entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["bash"]


Expand Down
67 changes: 41 additions & 26 deletions .docker/entrypoint.sh
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
#!/usr/bin/env bash
set -euo pipefail

# Default branch (override via env if you want)
BRANCH="${BRANCH:-master}"

# Tell Git that /workspace is safe to operate on
git config --global --add safe.directory /workspace

# Bail early if we don’t see a .git folder
if [ ! -d .git ]; then
echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
exit 1
fi

# Update & switch branches
echo "⏳ Fetching updates..."
git fetch origin --prune

echo "⏳ Checking out branch '$BRANCH'..."
# if branch already exists locally, switch; otherwise track remote
if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
git checkout "$BRANCH"
else
git checkout --track "origin/$BRANCH"
fi

echo "⏳ Pulling latest changes..."
git pull --ff-only origin "$BRANCH"
#use this code for deployment on EC2
#######################################################################################
# # Default branch (override via env if you want)
# BRANCH="${BRANCH:-master}"

# # Tell Git that /workspace is safe to operate on
# git config --global --add safe.directory /workspace

# # Bail early if we don’t see a .git folder
# if [ ! -d .git ]; then
# echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
# exit 1
# fi

# # Update & switch branches
# echo "⏳ Fetching updates..."
# git fetch origin --prune

# echo "⏳ Checking out branch '$BRANCH'..."
# # if branch already exists locally, switch; otherwise track remote
# if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
# git checkout "$BRANCH"
# else
# git checkout --track "origin/$BRANCH"
# fi

# echo "⏳ Pulling latest changes..."
# git pull --ff-only origin "$BRANCH"
#######################################################################################


#use this code for local development
#######################################################################################
# Skip Git checkout for local dev — just use the mounted code as-is
echo "Skipping Git checkout — using mounted code in /workspace"

# Set the Python path and working dir
#cd /workspace/src
#export PYTHONPATH=/workspace/src
#######################################################################################


# Hand off to whatever was passed in (e.g. bash)
exec "${@:-bash}"
Expand Down
4 changes: 4 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
.github
.gitignore
2 changes: 2 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
8 changes: 8 additions & 0 deletions docker-compose.gpu.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
version: "3.8"
services:
justinsight_service:
gpus: all
celery_worker:
gpus: all
celery_beat:
gpus: all
33 changes: 27 additions & 6 deletions docker-compose.yml
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
version: '3.8'

services:
justinsight_service:
build:
context: .
dockerfile: .docker/Dockerfile
gpus: all

# bind-mount your repo and the shared EBS volume
volumes:
- ./:/workspace:cached
- ./shared:/workspace/shared:cached

# ensure entrypoint.sh runs (clones & checks out the right branch)
entrypoint: ["/usr/local/bin/entrypoint.sh"]
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["bash"]
stdin_open: true
tty: true


# optional: default branch (can be overridden per-run)
environment:
- BRANCH=${BRANCH:-master}
redis:
image: redis:7-alpine
ports:
- "6379:6379"

celery_worker:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "worker", "--loglevel=info"] #the lowercase j is actually so important

celery_beat:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "beat", "--loglevel=info"] #the lowercase j is actually so important
18 changes: 17 additions & 1 deletion readme.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,4 +19,20 @@ A lightweight, news intelligence service for ingesting free news sources, taggin
1. **Clone** the repo:
```bash
git clone https://github.com/JustInternetAI/JustInsight.git
cd justinsight
cd justinsight


## Setting up Celery Beat:
- On MacOS
- run: docker compose up --build
- OR for running in the background: docker compose up -d
- use local development section of entrypoint.sh
- to shut down celery: docker compose down
- On the EC2
- run: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
- OR for running in the background: docker compose up -d
- use EC2 section of entrypoint.sh
- to shut down celery: docker compose down

*When running in background you can use "docker logs <container_name_or_id>" to see the log and "docker ps"
to find the ID.
1 change: 1 addition & 0 deletions requirements.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
celery[redis]
File renamed without changes.
Binary file addedsrc/ingest/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file addedsrc/ingest/__pycache__/bbc_rss.cpython-310.pyc
Binary file not shown.
4 changes: 3 additions & 1 deletion src/ingest/bbc_rss.py
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
print("Hello World!")

def testTask():
print("Hello World! From the RSS file")
Empty file addedsrc/justInsight/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file addedsrc/justInsight/__pycache__/tasks.cpython-310.pyc
Binary file not shown.
18 changes: 18 additions & 0 deletions src/justInsight/celery.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
# celery.py
from celery import Celery

app = Celery(
"justInsight",
broker="redis://redis:6379/0",
backend="redis://redis:6379/0",
include=["justInsight.tasks"], # adjust this to your tasks file
)

# Optional beat schedule
app.conf.beat_schedule = {
"sample-task-every-10-seconds": {
"task": "justInsight.tasks.sample_task",
"schedule": 10.0,
"args": (),
},
}
9 changes: 9 additions & 0 deletions src/justInsight/tasks.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
# tasks.py
from celery import shared_task
from ingest.bbc_rss import testTask


@shared_task
def sample_task():
testTask()
return "done!"
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Ingestion Scheduler with Celery and Docker by graceannmad · Pull Request #12 · JustInternetAI/JustInsight · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .docker/Dockerfile
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,15 +6,23 @@ RUN apt-get update && \
apt-get install -y python3 python3-pip git && \
rm -rf /var/lib/apt/lists/*

# Install requirements
COPY requirements.txt /workspace/requirements.txt
RUN pip install --no-cache-dir -r /workspace/requirements.txt

# Set working directory
WORKDIR /workspace

# Ensure Python can import from this path
#ENV PYTHONPATH=/workspace/src
ENV PYTHONPATH=/workspace:/workspace/src


# Copy the entrypoint from the .docker folder into the image
COPY .docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/use/local/bin/entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["bash"]


Expand Down
67 changes: 41 additions & 26 deletions .docker/entrypoint.sh
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
#!/usr/bin/env bash
set -euo pipefail

# Default branch (override via env if you want)
BRANCH="${BRANCH:-master}"

# Tell Git that /workspace is safe to operate on
git config --global --add safe.directory /workspace

# Bail early if we don’t see a .git folder
if [ ! -d .git ]; then
echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
exit 1
fi

# Update & switch branches
echo "⏳ Fetching updates..."
git fetch origin --prune

echo "⏳ Checking out branch '$BRANCH'..."
# if branch already exists locally, switch; otherwise track remote
if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
git checkout "$BRANCH"
else
git checkout --track "origin/$BRANCH"
fi

echo "⏳ Pulling latest changes..."
git pull --ff-only origin "$BRANCH"
#use this code for deployment on EC2
#######################################################################################
# # Default branch (override via env if you want)
# BRANCH="${BRANCH:-master}"

# # Tell Git that /workspace is safe to operate on
# git config --global --add safe.directory /workspace

# # Bail early if we don’t see a .git folder
# if [ ! -d .git ]; then
# echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
# exit 1
# fi

# # Update & switch branches
# echo "⏳ Fetching updates..."
# git fetch origin --prune

# echo "⏳ Checking out branch '$BRANCH'..."
# # if branch already exists locally, switch; otherwise track remote
# if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
# git checkout "$BRANCH"
# else
# git checkout --track "origin/$BRANCH"
# fi

# echo "⏳ Pulling latest changes..."
# git pull --ff-only origin "$BRANCH"
#######################################################################################


#use this code for local development
#######################################################################################
# Skip Git checkout for local dev — just use the mounted code as-is
echo "Skipping Git checkout — using mounted code in /workspace"

# Set the Python path and working dir
#cd /workspace/src
#export PYTHONPATH=/workspace/src
#######################################################################################


# Hand off to whatever was passed in (e.g. bash)
exec "${@:-bash}"
Expand Down
4 changes: 4 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
.github
.gitignore
2 changes: 2 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
8 changes: 8 additions & 0 deletions docker-compose.gpu.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
version: "3.8"
services:
justinsight_service:
gpus: all
celery_worker:
gpus: all
celery_beat:
gpus: all
33 changes: 27 additions & 6 deletions docker-compose.yml
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
version: '3.8'

services:
justinsight_service:
build:
context: .
dockerfile: .docker/Dockerfile
gpus: all

# bind-mount your repo and the shared EBS volume
volumes:
- ./:/workspace:cached
- ./shared:/workspace/shared:cached

# ensure entrypoint.sh runs (clones & checks out the right branch)
entrypoint: ["/usr/local/bin/entrypoint.sh"]
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["bash"]
stdin_open: true
tty: true


# optional: default branch (can be overridden per-run)
environment:
- BRANCH=${BRANCH:-master}
redis:
image: redis:7-alpine
ports:
- "6379:6379"

celery_worker:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "worker", "--loglevel=info"] #the lowercase j is actually so important

celery_beat:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "beat", "--loglevel=info"] #the lowercase j is actually so important
18 changes: 17 additions & 1 deletion readme.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,4 +19,20 @@ A lightweight, news intelligence service for ingesting free news sources, taggin
1. **Clone** the repo:
```bash
git clone https://github.com/JustInternetAI/JustInsight.git
cd justinsight
cd justinsight


## Setting up Celery Beat:
- On MacOS
- run: docker compose up --build
- OR for running in the background: docker compose up -d
- use local development section of entrypoint.sh
- to shut down celery: docker compose down
- On the EC2
- run: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
- OR for running in the background: docker compose up -d
- use EC2 section of entrypoint.sh
- to shut down celery: docker compose down

*When running in background you can use "docker logs <container_name_or_id>" to see the log and "docker ps"
to find the ID.
1 change: 1 addition & 0 deletions requirements.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
celery[redis]
File renamed without changes.
Binary file addedsrc/ingest/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file addedsrc/ingest/__pycache__/bbc_rss.cpython-310.pyc
Binary file not shown.
4 changes: 3 additions & 1 deletion src/ingest/bbc_rss.py
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
print("Hello World!")

def testTask():
print("Hello World! From the RSS file")
Empty file addedsrc/justInsight/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file addedsrc/justInsight/__pycache__/tasks.cpython-310.pyc
Binary file not shown.
18 changes: 18 additions & 0 deletions src/justInsight/celery.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
# celery.py
from celery import Celery

app = Celery(
"justInsight",
broker="redis://redis:6379/0",
backend="redis://redis:6379/0",
include=["justInsight.tasks"], # adjust this to your tasks file
)

# Optional beat schedule
app.conf.beat_schedule = {
"sample-task-every-10-seconds": {
"task": "justInsight.tasks.sample_task",
"schedule": 10.0,
"args": (),
},
}
9 changes: 9 additions & 0 deletions src/justInsight/tasks.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
# tasks.py
from celery import shared_task
from ingest.bbc_rss import testTask


@shared_task
def sample_task():
testTask()
return "done!"
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Ingestion Scheduler with Celery and Docker by graceannmad · Pull Request #12 · JustInternetAI/JustInsight · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .docker/Dockerfile
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,15 +6,23 @@ RUN apt-get update && \
apt-get install -y python3 python3-pip git && \
rm -rf /var/lib/apt/lists/*

# Install requirements
COPY requirements.txt /workspace/requirements.txt
RUN pip install --no-cache-dir -r /workspace/requirements.txt

# Set working directory
WORKDIR /workspace

# Ensure Python can import from this path
#ENV PYTHONPATH=/workspace/src
ENV PYTHONPATH=/workspace:/workspace/src


# Copy the entrypoint from the .docker folder into the image
COPY .docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/use/local/bin/entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["bash"]


Expand Down
67 changes: 41 additions & 26 deletions .docker/entrypoint.sh
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
#!/usr/bin/env bash
set -euo pipefail

# Default branch (override via env if you want)
BRANCH="${BRANCH:-master}"

# Tell Git that /workspace is safe to operate on
git config --global --add safe.directory /workspace

# Bail early if we don’t see a .git folder
if [ ! -d .git ]; then
echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
exit 1
fi

# Update & switch branches
echo "⏳ Fetching updates..."
git fetch origin --prune

echo "⏳ Checking out branch '$BRANCH'..."
# if branch already exists locally, switch; otherwise track remote
if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
git checkout "$BRANCH"
else
git checkout --track "origin/$BRANCH"
fi

echo "⏳ Pulling latest changes..."
git pull --ff-only origin "$BRANCH"
#use this code for deployment on EC2
#######################################################################################
# # Default branch (override via env if you want)
# BRANCH="${BRANCH:-master}"

# # Tell Git that /workspace is safe to operate on
# git config --global --add safe.directory /workspace

# # Bail early if we don’t see a .git folder
# if [ ! -d .git ]; then
# echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
# exit 1
# fi

# # Update & switch branches
# echo "⏳ Fetching updates..."
# git fetch origin --prune

# echo "⏳ Checking out branch '$BRANCH'..."
# # if branch already exists locally, switch; otherwise track remote
# if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
# git checkout "$BRANCH"
# else
# git checkout --track "origin/$BRANCH"
# fi

# echo "⏳ Pulling latest changes..."
# git pull --ff-only origin "$BRANCH"
#######################################################################################


#use this code for local development
#######################################################################################
# Skip Git checkout for local dev — just use the mounted code as-is
echo "Skipping Git checkout — using mounted code in /workspace"

# Set the Python path and working dir
#cd /workspace/src
#export PYTHONPATH=/workspace/src
#######################################################################################


# Hand off to whatever was passed in (e.g. bash)
exec "${@:-bash}"
Expand Down
4 changes: 4 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
.github
.gitignore
2 changes: 2 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
8 changes: 8 additions & 0 deletions docker-compose.gpu.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
version: "3.8"
services:
justinsight_service:
gpus: all
celery_worker:
gpus: all
celery_beat:
gpus: all
33 changes: 27 additions & 6 deletions docker-compose.yml
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
version: '3.8'

services:
justinsight_service:
build:
context: .
dockerfile: .docker/Dockerfile
gpus: all

# bind-mount your repo and the shared EBS volume
volumes:
- ./:/workspace:cached
- ./shared:/workspace/shared:cached

# ensure entrypoint.sh runs (clones & checks out the right branch)
entrypoint: ["/usr/local/bin/entrypoint.sh"]
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["bash"]
stdin_open: true
tty: true


# optional: default branch (can be overridden per-run)
environment:
- BRANCH=${BRANCH:-master}
redis:
image: redis:7-alpine
ports:
- "6379:6379"

celery_worker:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "worker", "--loglevel=info"] #the lowercase j is actually so important

celery_beat:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "beat", "--loglevel=info"] #the lowercase j is actually so important
18 changes: 17 additions & 1 deletion readme.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,4 +19,20 @@ A lightweight, news intelligence service for ingesting free news sources, taggin
1. **Clone** the repo:
```bash
git clone https://github.com/JustInternetAI/JustInsight.git
cd justinsight
cd justinsight


## Setting up Celery Beat:
- On MacOS
- run: docker compose up --build
- OR for running in the background: docker compose up -d
- use local development section of entrypoint.sh
- to shut down celery: docker compose down
- On the EC2
- run: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
- OR for running in the background: docker compose up -d
- use EC2 section of entrypoint.sh
- to shut down celery: docker compose down

*When running in background you can use "docker logs <container_name_or_id>" to see the log and "docker ps"
to find the ID.
1 change: 1 addition & 0 deletions requirements.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
celery[redis]
File renamed without changes.
Binary file addedsrc/ingest/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file addedsrc/ingest/__pycache__/bbc_rss.cpython-310.pyc
Binary file not shown.
4 changes: 3 additions & 1 deletion src/ingest/bbc_rss.py
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
print("Hello World!")

def testTask():
print("Hello World! From the RSS file")
Empty file addedsrc/justInsight/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file addedsrc/justInsight/__pycache__/tasks.cpython-310.pyc
Binary file not shown.
18 changes: 18 additions & 0 deletions src/justInsight/celery.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
# celery.py
from celery import Celery

app = Celery(
"justInsight",
broker="redis://redis:6379/0",
backend="redis://redis:6379/0",
include=["justInsight.tasks"], # adjust this to your tasks file
)

# Optional beat schedule
app.conf.beat_schedule = {
"sample-task-every-10-seconds": {
"task": "justInsight.tasks.sample_task",
"schedule": 10.0,
"args": (),
},
}
9 changes: 9 additions & 0 deletions src/justInsight/tasks.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
# tasks.py
from celery import shared_task
from ingest.bbc_rss import testTask


@shared_task
def sample_task():
testTask()
return "done!"
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Ingestion Scheduler with Celery and Docker by graceannmad · Pull Request #12 · JustInternetAI/JustInsight · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .docker/Dockerfile
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,15 +6,23 @@ RUN apt-get update && \
apt-get install -y python3 python3-pip git && \
rm -rf /var/lib/apt/lists/*

# Install requirements
COPY requirements.txt /workspace/requirements.txt
RUN pip install --no-cache-dir -r /workspace/requirements.txt

# Set working directory
WORKDIR /workspace

# Ensure Python can import from this path
#ENV PYTHONPATH=/workspace/src
ENV PYTHONPATH=/workspace:/workspace/src


# Copy the entrypoint from the .docker folder into the image
COPY .docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/use/local/bin/entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["bash"]


Expand Down
67 changes: 41 additions & 26 deletions .docker/entrypoint.sh
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
#!/usr/bin/env bash
set -euo pipefail

# Default branch (override via env if you want)
BRANCH="${BRANCH:-master}"

# Tell Git that /workspace is safe to operate on
git config --global --add safe.directory /workspace

# Bail early if we don’t see a .git folder
if [ ! -d .git ]; then
echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
exit 1
fi

# Update & switch branches
echo "⏳ Fetching updates..."
git fetch origin --prune

echo "⏳ Checking out branch '$BRANCH'..."
# if branch already exists locally, switch; otherwise track remote
if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
git checkout "$BRANCH"
else
git checkout --track "origin/$BRANCH"
fi

echo "⏳ Pulling latest changes..."
git pull --ff-only origin "$BRANCH"
#use this code for deployment on EC2
#######################################################################################
# # Default branch (override via env if you want)
# BRANCH="${BRANCH:-master}"

# # Tell Git that /workspace is safe to operate on
# git config --global --add safe.directory /workspace

# # Bail early if we don’t see a .git folder
# if [ ! -d .git ]; then
# echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
# exit 1
# fi

# # Update & switch branches
# echo "⏳ Fetching updates..."
# git fetch origin --prune

# echo "⏳ Checking out branch '$BRANCH'..."
# # if branch already exists locally, switch; otherwise track remote
# if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
# git checkout "$BRANCH"
# else
# git checkout --track "origin/$BRANCH"
# fi

# echo "⏳ Pulling latest changes..."
# git pull --ff-only origin "$BRANCH"
#######################################################################################


#use this code for local development
#######################################################################################
# Skip Git checkout for local dev — just use the mounted code as-is
echo "Skipping Git checkout — using mounted code in /workspace"

# Set the Python path and working dir
#cd /workspace/src
#export PYTHONPATH=/workspace/src
#######################################################################################


# Hand off to whatever was passed in (e.g. bash)
exec "${@:-bash}"
Expand Down
4 changes: 4 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
.github
.gitignore
2 changes: 2 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
8 changes: 8 additions & 0 deletions docker-compose.gpu.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
version: "3.8"
services:
justinsight_service:
gpus: all
celery_worker:
gpus: all
celery_beat:
gpus: all
33 changes: 27 additions & 6 deletions docker-compose.yml
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
version: '3.8'

services:
justinsight_service:
build:
context: .
dockerfile: .docker/Dockerfile
gpus: all

# bind-mount your repo and the shared EBS volume
volumes:
- ./:/workspace:cached
- ./shared:/workspace/shared:cached

# ensure entrypoint.sh runs (clones & checks out the right branch)
entrypoint: ["/usr/local/bin/entrypoint.sh"]
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["bash"]
stdin_open: true
tty: true


# optional: default branch (can be overridden per-run)
environment:
- BRANCH=${BRANCH:-master}
redis:
image: redis:7-alpine
ports:
- "6379:6379"

celery_worker:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "worker", "--loglevel=info"] #the lowercase j is actually so important

celery_beat:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "beat", "--loglevel=info"] #the lowercase j is actually so important
18 changes: 17 additions & 1 deletion readme.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,4 +19,20 @@ A lightweight, news intelligence service for ingesting free news sources, taggin
1. **Clone** the repo:
```bash
git clone https://github.com/JustInternetAI/JustInsight.git
cd justinsight
cd justinsight


## Setting up Celery Beat:
- On MacOS
- run: docker compose up --build
- OR for running in the background: docker compose up -d
- use local development section of entrypoint.sh
- to shut down celery: docker compose down
- On the EC2
- run: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
- OR for running in the background: docker compose up -d
- use EC2 section of entrypoint.sh
- to shut down celery: docker compose down

*When running in background you can use "docker logs <container_name_or_id>" to see the log and "docker ps"
to find the ID.
1 change: 1 addition & 0 deletions requirements.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
celery[redis]
File renamed without changes.
Binary file addedsrc/ingest/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file addedsrc/ingest/__pycache__/bbc_rss.cpython-310.pyc
Binary file not shown.
4 changes: 3 additions & 1 deletion src/ingest/bbc_rss.py
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
print("Hello World!")

def testTask():
print("Hello World! From the RSS file")
Empty file addedsrc/justInsight/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file addedsrc/justInsight/__pycache__/tasks.cpython-310.pyc
Binary file not shown.
18 changes: 18 additions & 0 deletions src/justInsight/celery.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
# celery.py
from celery import Celery

app = Celery(
"justInsight",
broker="redis://redis:6379/0",
backend="redis://redis:6379/0",
include=["justInsight.tasks"], # adjust this to your tasks file
)

# Optional beat schedule
app.conf.beat_schedule = {
"sample-task-every-10-seconds": {
"task": "justInsight.tasks.sample_task",
"schedule": 10.0,
"args": (),
},
}
9 changes: 9 additions & 0 deletions src/justInsight/tasks.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
# tasks.py
from celery import shared_task
from ingest.bbc_rss import testTask


@shared_task
def sample_task():
testTask()
return "done!"
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Ingestion Scheduler with Celery and Docker by graceannmad · Pull Request #12 · JustInternetAI/JustInsight · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .docker/Dockerfile
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,15 +6,23 @@ RUN apt-get update && \
apt-get install -y python3 python3-pip git && \
rm -rf /var/lib/apt/lists/*

# Install requirements
COPY requirements.txt /workspace/requirements.txt
RUN pip install --no-cache-dir -r /workspace/requirements.txt

# Set working directory
WORKDIR /workspace

# Ensure Python can import from this path
#ENV PYTHONPATH=/workspace/src
ENV PYTHONPATH=/workspace:/workspace/src


# Copy the entrypoint from the .docker folder into the image
COPY .docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/use/local/bin/entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["bash"]


Expand Down
67 changes: 41 additions & 26 deletions .docker/entrypoint.sh
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
#!/usr/bin/env bash
set -euo pipefail

# Default branch (override via env if you want)
BRANCH="${BRANCH:-master}"

# Tell Git that /workspace is safe to operate on
git config --global --add safe.directory /workspace

# Bail early if we don’t see a .git folder
if [ ! -d .git ]; then
echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
exit 1
fi

# Update & switch branches
echo "⏳ Fetching updates..."
git fetch origin --prune

echo "⏳ Checking out branch '$BRANCH'..."
# if branch already exists locally, switch; otherwise track remote
if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
git checkout "$BRANCH"
else
git checkout --track "origin/$BRANCH"
fi

echo "⏳ Pulling latest changes..."
git pull --ff-only origin "$BRANCH"
#use this code for deployment on EC2
#######################################################################################
# # Default branch (override via env if you want)
# BRANCH="${BRANCH:-master}"

# # Tell Git that /workspace is safe to operate on
# git config --global --add safe.directory /workspace

# # Bail early if we don’t see a .git folder
# if [ ! -d .git ]; then
# echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
# exit 1
# fi

# # Update & switch branches
# echo "⏳ Fetching updates..."
# git fetch origin --prune

# echo "⏳ Checking out branch '$BRANCH'..."
# # if branch already exists locally, switch; otherwise track remote
# if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
# git checkout "$BRANCH"
# else
# git checkout --track "origin/$BRANCH"
# fi

# echo "⏳ Pulling latest changes..."
# git pull --ff-only origin "$BRANCH"
#######################################################################################


#use this code for local development
#######################################################################################
# Skip Git checkout for local dev — just use the mounted code as-is
echo "Skipping Git checkout — using mounted code in /workspace"

# Set the Python path and working dir
#cd /workspace/src
#export PYTHONPATH=/workspace/src
#######################################################################################


# Hand off to whatever was passed in (e.g. bash)
exec "${@:-bash}"
Expand Down
4 changes: 4 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
.github
.gitignore
2 changes: 2 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
8 changes: 8 additions & 0 deletions docker-compose.gpu.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
version: "3.8"
services:
justinsight_service:
gpus: all
celery_worker:
gpus: all
celery_beat:
gpus: all
33 changes: 27 additions & 6 deletions docker-compose.yml
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
version: '3.8'

services:
justinsight_service:
build:
context: .
dockerfile: .docker/Dockerfile
gpus: all

# bind-mount your repo and the shared EBS volume
volumes:
- ./:/workspace:cached
- ./shared:/workspace/shared:cached

# ensure entrypoint.sh runs (clones & checks out the right branch)
entrypoint: ["/usr/local/bin/entrypoint.sh"]
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["bash"]
stdin_open: true
tty: true


# optional: default branch (can be overridden per-run)
environment:
- BRANCH=${BRANCH:-master}
redis:
image: redis:7-alpine
ports:
- "6379:6379"

celery_worker:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "worker", "--loglevel=info"] #the lowercase j is actually so important

celery_beat:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "beat", "--loglevel=info"] #the lowercase j is actually so important
18 changes: 17 additions & 1 deletion readme.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,4 +19,20 @@ A lightweight, news intelligence service for ingesting free news sources, taggin
1. **Clone** the repo:
```bash
git clone https://github.com/JustInternetAI/JustInsight.git
cd justinsight
cd justinsight


## Setting up Celery Beat:
- On MacOS
- run: docker compose up --build
- OR for running in the background: docker compose up -d
- use local development section of entrypoint.sh
- to shut down celery: docker compose down
- On the EC2
- run: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
- OR for running in the background: docker compose up -d
- use EC2 section of entrypoint.sh
- to shut down celery: docker compose down

*When running in background you can use "docker logs <container_name_or_id>" to see the log and "docker ps"
to find the ID.
1 change: 1 addition & 0 deletions requirements.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
celery[redis]
File renamed without changes.
Binary file addedsrc/ingest/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file addedsrc/ingest/__pycache__/bbc_rss.cpython-310.pyc
Binary file not shown.
4 changes: 3 additions & 1 deletion src/ingest/bbc_rss.py
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
print("Hello World!")

def testTask():
print("Hello World! From the RSS file")
Empty file addedsrc/justInsight/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file addedsrc/justInsight/__pycache__/tasks.cpython-310.pyc
Binary file not shown.
18 changes: 18 additions & 0 deletions src/justInsight/celery.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
# celery.py
from celery import Celery

app = Celery(
"justInsight",
broker="redis://redis:6379/0",
backend="redis://redis:6379/0",
include=["justInsight.tasks"], # adjust this to your tasks file
)

# Optional beat schedule
app.conf.beat_schedule = {
"sample-task-every-10-seconds": {
"task": "justInsight.tasks.sample_task",
"schedule": 10.0,
"args": (),
},
}
9 changes: 9 additions & 0 deletions src/justInsight/tasks.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
# tasks.py
from celery import shared_task
from ingest.bbc_rss import testTask


@shared_task
def sample_task():
testTask()
return "done!"
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Ingestion Scheduler with Celery and Docker by graceannmad · Pull Request #12 · JustInternetAI/JustInsight · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .docker/Dockerfile
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,15 +6,23 @@ RUN apt-get update && \
apt-get install -y python3 python3-pip git && \
rm -rf /var/lib/apt/lists/*

# Install requirements
COPY requirements.txt /workspace/requirements.txt
RUN pip install --no-cache-dir -r /workspace/requirements.txt

# Set working directory
WORKDIR /workspace

# Ensure Python can import from this path
#ENV PYTHONPATH=/workspace/src
ENV PYTHONPATH=/workspace:/workspace/src


# Copy the entrypoint from the .docker folder into the image
COPY .docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/use/local/bin/entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["bash"]


Expand Down
67 changes: 41 additions & 26 deletions .docker/entrypoint.sh
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
#!/usr/bin/env bash
set -euo pipefail

# Default branch (override via env if you want)
BRANCH="${BRANCH:-master}"

# Tell Git that /workspace is safe to operate on
git config --global --add safe.directory /workspace

# Bail early if we don’t see a .git folder
if [ ! -d .git ]; then
echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
exit 1
fi

# Update & switch branches
echo "⏳ Fetching updates..."
git fetch origin --prune

echo "⏳ Checking out branch '$BRANCH'..."
# if branch already exists locally, switch; otherwise track remote
if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
git checkout "$BRANCH"
else
git checkout --track "origin/$BRANCH"
fi

echo "⏳ Pulling latest changes..."
git pull --ff-only origin "$BRANCH"
#use this code for deployment on EC2
#######################################################################################
# # Default branch (override via env if you want)
# BRANCH="${BRANCH:-master}"

# # Tell Git that /workspace is safe to operate on
# git config --global --add safe.directory /workspace

# # Bail early if we don’t see a .git folder
# if [ ! -d .git ]; then
# echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
# exit 1
# fi

# # Update & switch branches
# echo "⏳ Fetching updates..."
# git fetch origin --prune

# echo "⏳ Checking out branch '$BRANCH'..."
# # if branch already exists locally, switch; otherwise track remote
# if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
# git checkout "$BRANCH"
# else
# git checkout --track "origin/$BRANCH"
# fi

# echo "⏳ Pulling latest changes..."
# git pull --ff-only origin "$BRANCH"
#######################################################################################


#use this code for local development
#######################################################################################
# Skip Git checkout for local dev — just use the mounted code as-is
echo "Skipping Git checkout — using mounted code in /workspace"

# Set the Python path and working dir
#cd /workspace/src
#export PYTHONPATH=/workspace/src
#######################################################################################


# Hand off to whatever was passed in (e.g. bash)
exec "${@:-bash}"
Expand Down
4 changes: 4 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
.github
.gitignore
2 changes: 2 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
8 changes: 8 additions & 0 deletions docker-compose.gpu.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
version: "3.8"
services:
justinsight_service:
gpus: all
celery_worker:
gpus: all
celery_beat:
gpus: all
33 changes: 27 additions & 6 deletions docker-compose.yml
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
version: '3.8'

services:
justinsight_service:
build:
context: .
dockerfile: .docker/Dockerfile
gpus: all

# bind-mount your repo and the shared EBS volume
volumes:
- ./:/workspace:cached
- ./shared:/workspace/shared:cached

# ensure entrypoint.sh runs (clones & checks out the right branch)
entrypoint: ["/usr/local/bin/entrypoint.sh"]
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["bash"]
stdin_open: true
tty: true


# optional: default branch (can be overridden per-run)
environment:
- BRANCH=${BRANCH:-master}
redis:
image: redis:7-alpine
ports:
- "6379:6379"

celery_worker:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "worker", "--loglevel=info"] #the lowercase j is actually so important

celery_beat:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "beat", "--loglevel=info"] #the lowercase j is actually so important
18 changes: 17 additions & 1 deletion readme.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,4 +19,20 @@ A lightweight, news intelligence service for ingesting free news sources, taggin
1. **Clone** the repo:
```bash
git clone https://github.com/JustInternetAI/JustInsight.git
cd justinsight
cd justinsight


## Setting up Celery Beat:
- On MacOS
- run: docker compose up --build
- OR for running in the background: docker compose up -d
- use local development section of entrypoint.sh
- to shut down celery: docker compose down
- On the EC2
- run: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
- OR for running in the background: docker compose up -d
- use EC2 section of entrypoint.sh
- to shut down celery: docker compose down

*When running in background you can use "docker logs <container_name_or_id>" to see the log and "docker ps"
to find the ID.
1 change: 1 addition & 0 deletions requirements.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
celery[redis]
File renamed without changes.
Binary file addedsrc/ingest/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file addedsrc/ingest/__pycache__/bbc_rss.cpython-310.pyc
Binary file not shown.
4 changes: 3 additions & 1 deletion src/ingest/bbc_rss.py
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
print("Hello World!")

def testTask():
print("Hello World! From the RSS file")
Empty file addedsrc/justInsight/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file addedsrc/justInsight/__pycache__/tasks.cpython-310.pyc
Binary file not shown.
18 changes: 18 additions & 0 deletions src/justInsight/celery.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
# celery.py
from celery import Celery

app = Celery(
"justInsight",
broker="redis://redis:6379/0",
backend="redis://redis:6379/0",
include=["justInsight.tasks"], # adjust this to your tasks file
)

# Optional beat schedule
app.conf.beat_schedule = {
"sample-task-every-10-seconds": {
"task": "justInsight.tasks.sample_task",
"schedule": 10.0,
"args": (),
},
}
9 changes: 9 additions & 0 deletions src/justInsight/tasks.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
# tasks.py
from celery import shared_task
from ingest.bbc_rss import testTask


@shared_task
def sample_task():
testTask()
return "done!"
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Ingestion Scheduler with Celery and Docker by graceannmad · Pull Request #12 · JustInternetAI/JustInsight · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .docker/Dockerfile
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,15 +6,23 @@ RUN apt-get update && \
apt-get install -y python3 python3-pip git && \
rm -rf /var/lib/apt/lists/*

# Install requirements
COPY requirements.txt /workspace/requirements.txt
RUN pip install --no-cache-dir -r /workspace/requirements.txt

# Set working directory
WORKDIR /workspace

# Ensure Python can import from this path
#ENV PYTHONPATH=/workspace/src
ENV PYTHONPATH=/workspace:/workspace/src


# Copy the entrypoint from the .docker folder into the image
COPY .docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/use/local/bin/entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["bash"]


Expand Down
67 changes: 41 additions & 26 deletions .docker/entrypoint.sh
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
#!/usr/bin/env bash
set -euo pipefail

# Default branch (override via env if you want)
BRANCH="${BRANCH:-master}"

# Tell Git that /workspace is safe to operate on
git config --global --add safe.directory /workspace

# Bail early if we don’t see a .git folder
if [ ! -d .git ]; then
echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
exit 1
fi

# Update & switch branches
echo "⏳ Fetching updates..."
git fetch origin --prune

echo "⏳ Checking out branch '$BRANCH'..."
# if branch already exists locally, switch; otherwise track remote
if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
git checkout "$BRANCH"
else
git checkout --track "origin/$BRANCH"
fi

echo "⏳ Pulling latest changes..."
git pull --ff-only origin "$BRANCH"
#use this code for deployment on EC2
#######################################################################################
# # Default branch (override via env if you want)
# BRANCH="${BRANCH:-master}"

# # Tell Git that /workspace is safe to operate on
# git config --global --add safe.directory /workspace

# # Bail early if we don’t see a .git folder
# if [ ! -d .git ]; then
# echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
# exit 1
# fi

# # Update & switch branches
# echo "⏳ Fetching updates..."
# git fetch origin --prune

# echo "⏳ Checking out branch '$BRANCH'..."
# # if branch already exists locally, switch; otherwise track remote
# if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
# git checkout "$BRANCH"
# else
# git checkout --track "origin/$BRANCH"
# fi

# echo "⏳ Pulling latest changes..."
# git pull --ff-only origin "$BRANCH"
#######################################################################################


#use this code for local development
#######################################################################################
# Skip Git checkout for local dev — just use the mounted code as-is
echo "Skipping Git checkout — using mounted code in /workspace"

# Set the Python path and working dir
#cd /workspace/src
#export PYTHONPATH=/workspace/src
#######################################################################################


# Hand off to whatever was passed in (e.g. bash)
exec "${@:-bash}"
Expand Down
4 changes: 4 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
.github
.gitignore
2 changes: 2 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
8 changes: 8 additions & 0 deletions docker-compose.gpu.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
version: "3.8"
services:
justinsight_service:
gpus: all
celery_worker:
gpus: all
celery_beat:
gpus: all
33 changes: 27 additions & 6 deletions docker-compose.yml
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
version: '3.8'

services:
justinsight_service:
build:
context: .
dockerfile: .docker/Dockerfile
gpus: all

# bind-mount your repo and the shared EBS volume
volumes:
- ./:/workspace:cached
- ./shared:/workspace/shared:cached

# ensure entrypoint.sh runs (clones & checks out the right branch)
entrypoint: ["/usr/local/bin/entrypoint.sh"]
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["bash"]
stdin_open: true
tty: true


# optional: default branch (can be overridden per-run)
environment:
- BRANCH=${BRANCH:-master}
redis:
image: redis:7-alpine
ports:
- "6379:6379"

celery_worker:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "worker", "--loglevel=info"] #the lowercase j is actually so important

celery_beat:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "beat", "--loglevel=info"] #the lowercase j is actually so important
18 changes: 17 additions & 1 deletion readme.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,4 +19,20 @@ A lightweight, news intelligence service for ingesting free news sources, taggin
1. **Clone** the repo:
```bash
git clone https://github.com/JustInternetAI/JustInsight.git
cd justinsight
cd justinsight


## Setting up Celery Beat:
- On MacOS
- run: docker compose up --build
- OR for running in the background: docker compose up -d
- use local development section of entrypoint.sh
- to shut down celery: docker compose down
- On the EC2
- run: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
- OR for running in the background: docker compose up -d
- use EC2 section of entrypoint.sh
- to shut down celery: docker compose down

*When running in background you can use "docker logs <container_name_or_id>" to see the log and "docker ps"
to find the ID.
1 change: 1 addition & 0 deletions requirements.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
celery[redis]
File renamed without changes.
Binary file addedsrc/ingest/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file addedsrc/ingest/__pycache__/bbc_rss.cpython-310.pyc
Binary file not shown.
4 changes: 3 additions & 1 deletion src/ingest/bbc_rss.py
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
print("Hello World!")

def testTask():
print("Hello World! From the RSS file")
Empty file addedsrc/justInsight/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file addedsrc/justInsight/__pycache__/tasks.cpython-310.pyc
Binary file not shown.
18 changes: 18 additions & 0 deletions src/justInsight/celery.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
# celery.py
from celery import Celery

app = Celery(
"justInsight",
broker="redis://redis:6379/0",
backend="redis://redis:6379/0",
include=["justInsight.tasks"], # adjust this to your tasks file
)

# Optional beat schedule
app.conf.beat_schedule = {
"sample-task-every-10-seconds": {
"task": "justInsight.tasks.sample_task",
"schedule": 10.0,
"args": (),
},
}
9 changes: 9 additions & 0 deletions src/justInsight/tasks.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
# tasks.py
from celery import shared_task
from ingest.bbc_rss import testTask


@shared_task
def sample_task():
testTask()
return "done!"
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Ingestion Scheduler with Celery and Docker by graceannmad · Pull Request #12 · JustInternetAI/JustInsight · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .docker/Dockerfile
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,15 +6,23 @@ RUN apt-get update && \
apt-get install -y python3 python3-pip git && \
rm -rf /var/lib/apt/lists/*

# Install requirements
COPY requirements.txt /workspace/requirements.txt
RUN pip install --no-cache-dir -r /workspace/requirements.txt

# Set working directory
WORKDIR /workspace

# Ensure Python can import from this path
#ENV PYTHONPATH=/workspace/src
ENV PYTHONPATH=/workspace:/workspace/src


# Copy the entrypoint from the .docker folder into the image
COPY .docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/use/local/bin/entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["bash"]


Expand Down
67 changes: 41 additions & 26 deletions .docker/entrypoint.sh
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
#!/usr/bin/env bash
set -euo pipefail

# Default branch (override via env if you want)
BRANCH="${BRANCH:-master}"

# Tell Git that /workspace is safe to operate on
git config --global --add safe.directory /workspace

# Bail early if we don’t see a .git folder
if [ ! -d .git ]; then
echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
exit 1
fi

# Update & switch branches
echo "⏳ Fetching updates..."
git fetch origin --prune

echo "⏳ Checking out branch '$BRANCH'..."
# if branch already exists locally, switch; otherwise track remote
if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
git checkout "$BRANCH"
else
git checkout --track "origin/$BRANCH"
fi

echo "⏳ Pulling latest changes..."
git pull --ff-only origin "$BRANCH"
#use this code for deployment on EC2
#######################################################################################
# # Default branch (override via env if you want)
# BRANCH="${BRANCH:-master}"

# # Tell Git that /workspace is safe to operate on
# git config --global --add safe.directory /workspace

# # Bail early if we don’t see a .git folder
# if [ ! -d .git ]; then
# echo "❌ Error: /workspace is not a git repo. Please 'git clone' on the host first."
# exit 1
# fi

# # Update & switch branches
# echo "⏳ Fetching updates..."
# git fetch origin --prune

# echo "⏳ Checking out branch '$BRANCH'..."
# # if branch already exists locally, switch; otherwise track remote
# if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
# git checkout "$BRANCH"
# else
# git checkout --track "origin/$BRANCH"
# fi

# echo "⏳ Pulling latest changes..."
# git pull --ff-only origin "$BRANCH"
#######################################################################################


#use this code for local development
#######################################################################################
# Skip Git checkout for local dev — just use the mounted code as-is
echo "Skipping Git checkout — using mounted code in /workspace"

# Set the Python path and working dir
#cd /workspace/src
#export PYTHONPATH=/workspace/src
#######################################################################################


# Hand off to whatever was passed in (e.g. bash)
exec "${@:-bash}"
Expand Down
4 changes: 4 additions & 0 deletions .dockerignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
.github
.gitignore
2 changes: 2 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
celerybeat-schedule.*
src/celerybeat-schedule.*
8 changes: 8 additions & 0 deletions docker-compose.gpu.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
version: "3.8"
services:
justinsight_service:
gpus: all
celery_worker:
gpus: all
celery_beat:
gpus: all
33 changes: 27 additions & 6 deletions docker-compose.yml
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
version: '3.8'

services:
justinsight_service:
build:
context: .
dockerfile: .docker/Dockerfile
gpus: all

# bind-mount your repo and the shared EBS volume
volumes:
- ./:/workspace:cached
- ./shared:/workspace/shared:cached

# ensure entrypoint.sh runs (clones & checks out the right branch)
entrypoint: ["/usr/local/bin/entrypoint.sh"]
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["bash"]
stdin_open: true
tty: true


# optional: default branch (can be overridden per-run)
environment:
- BRANCH=${BRANCH:-master}
redis:
image: redis:7-alpine
ports:
- "6379:6379"

celery_worker:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "worker", "--loglevel=info"] #the lowercase j is actually so important

celery_beat:
build:
context: .
dockerfile: .docker/Dockerfile
volumes:
- .:/workspace:cached
depends_on:
- redis
#entrypoint: ["/usr/local/bin/entrypoint.sh"]
command: ["celery", "-A", justinsight.celery, "beat", "--loglevel=info"] #the lowercase j is actually so important
18 changes: 17 additions & 1 deletion readme.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,4 +19,20 @@ A lightweight, news intelligence service for ingesting free news sources, taggin
1. **Clone** the repo:
```bash
git clone https://github.com/JustInternetAI/JustInsight.git
cd justinsight
cd justinsight


## Setting up Celery Beat:
- On MacOS
- run: docker compose up --build
- OR for running in the background: docker compose up -d
- use local development section of entrypoint.sh
- to shut down celery: docker compose down
- On the EC2
- run: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
- OR for running in the background: docker compose up -d
- use EC2 section of entrypoint.sh
- to shut down celery: docker compose down

*When running in background you can use "docker logs <container_name_or_id>" to see the log and "docker ps"
to find the ID.
1 change: 1 addition & 0 deletions requirements.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
celery[redis]
File renamed without changes.
Binary file addedsrc/ingest/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file addedsrc/ingest/__pycache__/bbc_rss.cpython-310.pyc
Binary file not shown.
4 changes: 3 additions & 1 deletion src/ingest/bbc_rss.py
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
print("Hello World!")

def testTask():
print("Hello World! From the RSS file")
Empty file addedsrc/justInsight/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file addedsrc/justInsight/__pycache__/tasks.cpython-310.pyc
Binary file not shown.
18 changes: 18 additions & 0 deletions src/justInsight/celery.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
# celery.py
from celery import Celery

app = Celery(
"justInsight",
broker="redis://redis:6379/0",
backend="redis://redis:6379/0",
include=["justInsight.tasks"], # adjust this to your tasks file
)

# Optional beat schedule
app.conf.beat_schedule = {
"sample-task-every-10-seconds": {
"task": "justInsight.tasks.sample_task",
"schedule": 10.0,
"args": (),
},
}
9 changes: 9 additions & 0 deletions src/justInsight/tasks.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
# tasks.py
from celery import shared_task
from ingest.bbc_rss import testTask


@shared_task
def sample_task():
testTask()
return "done!"