Compare commits

...

11 Commits

Author SHA1 Message Date
wh1te909
4942f262f1 Release 0.8.2 2021-09-01 07:18:21 +00:00
wh1te909
a20b1a973e bump version 2021-09-01 07:18:09 +00:00
wh1te909
eae5e00706 allow filtering by overdue #674 2021-09-01 06:26:55 +00:00
sadnub
5c92d4b454 fix bug were script args weren't being substituted when testing scripts 2021-08-31 20:33:36 -04:00
wh1te909
38179b9d38 Release 0.8.1 2021-08-31 06:51:20 +00:00
wh1te909
8f510dde5a bump versions 2021-08-31 06:35:29 +00:00
wh1te909
be42d56e37 fix 500 error when trying to test newly added script 2021-08-31 06:16:40 +00:00
sadnub
c5c8f5fab1 formatting 2021-08-30 22:32:16 -04:00
sadnub
3d41d79078 change directory for nats configuration file for DOCKER. Fix nats-api commands in dev containers 2021-08-30 22:17:21 -04:00
sadnub
3005061a11 formatting 2021-08-30 08:06:15 -04:00
sadnub
65ea46f457 strip whitespace before processing collector output 2021-08-30 07:42:54 -04:00
11 changed files with 47 additions and 35 deletions

View File

@@ -13,12 +13,17 @@ EXPOSE 8000 8383 8005
RUN groupadd -g 1000 tactical && \
useradd -u 1000 -g 1000 tactical
# Copy Dev python reqs
COPY ./requirements.txt /
# Copy nats-api file
COPY natsapi/bin/nats-api /usr/local/bin/
RUN chmod +x /usr/local/bin/nats-api
# Copy Docker Entrypoint
COPY ./entrypoint.sh /
# Copy dev python reqs
COPY .devcontainer/requirements.txt /
# Copy docker entrypoint.sh
COPY .devcontainer/entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
WORKDIR ${WORKSPACE_DIR}/api/tacticalrmm

View File

@@ -6,8 +6,8 @@ services:
image: api-dev
restart: always
build:
context: .
dockerfile: ./api.dockerfile
context: ..
dockerfile: .devcontainer/api.dockerfile
command: ["tactical-api"]
environment:
API_PORT: ${API_PORT}
@@ -127,9 +127,6 @@ services:
init-dev:
container_name: trmm-init-dev
image: api-dev
build:
context: .
dockerfile: ./api.dockerfile
restart: on-failure
command: ["tactical-init-dev"]
environment:
@@ -156,9 +153,6 @@ services:
celery-dev:
container_name: trmm-celery-dev
image: api-dev
build:
context: .
dockerfile: ./api.dockerfile
command: ["tactical-celery-dev"]
restart: always
networks:
@@ -174,9 +168,6 @@ services:
celerybeat-dev:
container_name: trmm-celerybeat-dev
image: api-dev
build:
context: .
dockerfile: ./api.dockerfile
command: ["tactical-celerybeat-dev"]
restart: always
networks:
@@ -192,9 +183,6 @@ services:
websockets-dev:
container_name: trmm-websockets-dev
image: api-dev
build:
context: .
dockerfile: ./api.dockerfile
command: ["tactical-websockets-dev"]
restart: always
networks:
@@ -234,9 +222,6 @@ services:
container_name: trmm-mkdocs-dev
image: api-dev
restart: always
build:
context: .
dockerfile: ./api.dockerfile
command: ["tactical-mkdocs-dev"]
ports:
- "8005:8005"

View File

@@ -644,7 +644,11 @@ def run_script(request):
else:
return notify_error("Custom Field was invalid")
value = r if request.data["save_all_output"] else r.split("\n")[-1].strip()
value = (
r.strip()
if request.data["save_all_output"]
else r.strip().split("\n")[-1].strip()
)
field.save_to_field(value)
return Response(r)

View File

@@ -361,7 +361,6 @@ class TaskRunner(APIView):
def patch(self, request, pk, agentid):
from alerts.models import Alert
from logs.models import AuditLog
agent = get_object_or_404(Agent, agent_id=agentid)
task = get_object_or_404(AutomatedTask, pk=pk)

View File

@@ -413,9 +413,9 @@ class AutomatedTask(BaseAuditModel):
agent_field = self.custom_field.get_or_create_field_value(self.agent)
value = (
self.stdout
self.stdout.strip()
if self.collector_all_output
else self.stdout.split("\n")[-1].strip()
else self.stdout.strip().split("\n")[-1].strip()
)
agent_field.save_to_field(value)

View File

@@ -128,7 +128,7 @@ class TestScript(APIView):
agent = get_object_or_404(Agent, pk=request.data["agent"])
parsed_args = Script.parse_script_args(
self, request.data["shell"], request.data["args"]
agent, request.data["shell"], request.data["args"]
)
data = {

View File

@@ -15,16 +15,16 @@ EXE_DIR = os.path.join(BASE_DIR, "tacticalrmm/private/exe")
AUTH_USER_MODEL = "accounts.User"
# latest release
TRMM_VERSION = "0.8.0"
TRMM_VERSION = "0.8.2"
# bump this version everytime vue code is changed
# to alert user they need to manually refresh their browser
APP_VER = "0.0.142"
APP_VER = "0.0.144"
# https://github.com/wh1te909/rmmagent
LATEST_AGENT_VER = "1.6.0"
LATEST_AGENT_VER = "1.6.1"
MESH_VER = "0.9.15"
MESH_VER = "0.9.16"
NATS_SERVER_VER = "2.3.3"

View File

@@ -265,7 +265,9 @@ def run_nats_api_cmd(mode: str, ids: list[str] = [], timeout: int = 30) -> None:
"dbname": db["NAME"],
}
with tempfile.NamedTemporaryFile() as fp:
with tempfile.NamedTemporaryFile(
dir="/opt/tactical/tmp" if settings.DOCKER_BUILD else None
) as fp:
with open(fp.name, "w") as f:
json.dump(config, f)

View File

@@ -479,7 +479,8 @@ export default {
if (filter === "actionspending") actions = true;
else if (filter === "checksfailing") checks = true;
else if (filter === "rebootneeded") reboot = true;
else if (filter === "online" || filter === "offline" || filter === "expired") availability = filter;
else if (filter === "online" || filter === "offline" || filter === "expired" || filter === "overdue")
availability = filter;
} else {
search = param + "";
}
@@ -492,7 +493,8 @@ export default {
if (actions && row.pending_actions_count === 0) return false;
if (reboot && !row.needs_reboot) return false;
if (availability === "online" && row.status !== "online") return false;
else if (availability === "offline" && row.status !== "overdue") return false;
else if (availability === "offline" && row.status !== "offline") return false;
else if (availability === "overdue" && row.status !== "overdue") return false;
else if (availability === "expired") {
let now = new Date();
let lastSeen = date.extractDate(row.last_seen, "MM DD YYYY HH:mm");

View File

@@ -150,7 +150,7 @@ export default {
// script form logic
const script = props.script
? ref(Object.assign({}, props.script))
: ref({ shell: "powershell", default_timeout: 90 });
: ref({ shell: "powershell", default_timeout: 90, args: [] });
if (props.clone) script.value.name = `(Copy) ${script.value.name}`;
const code = ref("");

View File

@@ -337,6 +337,16 @@
</q-item-section>
</q-item>
<q-item>
<q-item-section side>
<q-radio val="overdue" v-model="filterAvailability" />
</q-item-section>
<q-item-section>
<q-item-label>Show Overdue Only</q-item-label>
</q-item-section>
</q-item>
<q-item>
<q-item-section side>
<q-radio val="offline_30days" v-model="filterAvailability" />
@@ -809,7 +819,10 @@ export default {
// clear search if availability changes to all
if (
this.filterAvailability === "all" &&
(this.search.includes("is:online") || this.search.includes("is:offline") || this.search.includes("is:expired"))
(this.search.includes("is:online") ||
this.search.includes("is:offline") ||
this.search.includes("is:expired") ||
this.search.includes("is:overdue"))
)
this.clearFilter();
@@ -841,6 +854,8 @@ export default {
filterText += "is:offline ";
} else if (this.filterAvailability === "offline_30days") {
filterText += "is:expired ";
} else if (this.filterAvailability === "overdue") {
filterText += "is:overdue ";
}
}