Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
FoD
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
David Schmitz
FoD
Commits
566dc0ac
Commit
566dc0ac
authored
7 years ago
by
David Schmitz
Browse files
Options
Downloads
Patches
Plain Diff
FoD rule REST API: work on full deletion possibility
parent
a9ba7f5e
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
flowspec/models.py
+4
-2
4 additions, 2 deletions
flowspec/models.py
flowspec/tasks.py
+27
-21
27 additions, 21 deletions
flowspec/tasks.py
flowspec/validators.py
+1
-1
1 addition, 1 deletion
flowspec/validators.py
flowspec/viewsets.py
+22
-7
22 additions, 7 deletions
flowspec/viewsets.py
with
54 additions
and
31 deletions
flowspec/models.py
+
4
−
2
View file @
566dc0ac
...
...
@@ -90,6 +90,7 @@ ROUTE_STATES = (
(
"
OUTOFSYNC
"
,
"
OUTOFSYNC
"
),
(
"
INACTIVE
"
,
"
INACTIVE
"
),
(
"
ADMININACTIVE
"
,
"
ADMININACTIVE
"
),
(
"
INACTIVE_TODELETE
"
,
"
INACTIVE_TODELETE
"
),
)
...
...
@@ -310,6 +311,7 @@ class Route(models.Model):
def
commit_delete
(
self
,
*
args
,
**
kwargs
):
logger
.
info
(
"
model::commit_delete(): route=
"
+
str
(
self
)
+
"
, kwargs=
"
+
str
(
kwargs
))
username
=
None
reason_text
=
''
reason
=
''
...
...
@@ -535,7 +537,7 @@ class Route(models.Model):
self
.
status
=
"
ACTIVE
"
self
.
save
()
found
=
True
if
self
.
status
==
"
ADMININACTIVE
"
or
self
.
status
==
"
INACTIVE
"
or
self
.
status
==
"
EXPIRED
"
:
if
self
.
status
==
"
ADMININACTIVE
"
or
self
.
status
==
"
INACTIVE
"
or
self
.
status
==
"
INACTIVE_TODELETE
"
or
self
.
status
==
"
EXPIRED
"
:
found
=
True
return
found
...
...
@@ -630,7 +632,7 @@ class Route(models.Model):
@property
def
days_to_expire
(
self
):
if
self
.
status
not
in
[
'
EXPIRED
'
,
'
ADMININACTIVE
'
,
'
ERROR
'
,
'
INACTIVE
'
]:
if
self
.
status
not
in
[
'
EXPIRED
'
,
'
ADMININACTIVE
'
,
'
ERROR
'
,
'
INACTIVE
'
,
'
INACTIVE_TODELETE
'
]:
expiration_days
=
(
self
.
expires
-
datetime
.
date
.
today
()).
days
if
expiration_days
<
settings
.
EXPIRATION_NOTIFY_DAYS
:
return
"
%s
"
%
expiration_days
...
...
This diff is collapsed.
Click to expand it.
flowspec/tasks.py
+
27
−
21
View file @
566dc0ac
...
...
@@ -138,43 +138,49 @@ def edit(route, callback=None):
@task
(
ignore_result
=
True
)
def
delete
(
route
,
**
kwargs
):
logger
.
info
(
"
tasks::delete(): called
"
)
logger
.
info
(
"
tasks::delete(): called route=
"
+
str
(
route
))
logger
.
info
(
"
tasks::delete(): called route.dir=
"
+
str
(
dir
(
route
)))
logger
.
info
(
"
tasks::delete(): called kwargs=
"
+
str
(
kwargs
))
initial_status
=
route
.
status
logger
.
info
(
"
tasks::delete(): called initial_status=
"
+
str
(
initial_status
))
try
:
applier
=
PR
.
Applier
(
route_object
=
route
)
commit
,
response
=
applier
.
apply
(
operation
=
"
delete
"
)
reason_text
=
''
logger
.
info
(
"
tasks::delete(): called commit=
"
+
str
(
commit
))
if
commit
:
status
=
"
INACTIVE
"
if
"
reason
"
in
kwargs
and
kwargs
[
'
reason
'
]
==
'
EXPIRED
'
:
status
=
'
EXPIRED
'
reason_text
=
"
Reason: %s
"
%
status
else
:
status
=
'
DELETED
'
route
.
status
=
status
route
.
response
=
response
if
route
.
status
==
"
DELETED
"
:
# special new case for fully deleting a rule via REST API
status
=
"
INACTIVE
"
if
"
reason
"
in
kwargs
and
kwargs
[
'
reason
'
]
==
'
EXPIRED
'
:
status
=
'
EXPIRED
'
reason_text
=
"
Reason: %s
"
%
status
else
:
status
=
"
ERROR
"
if
commit
and
initial_status
==
"
INACTIVE_TODELETE
"
:
# special new case for fully deleting a rule via REST API
route
.
delete
()
msg1
=
"
[%s] Fully deleted rule : %s%s- Result %s
"
%
(
route
.
applier
,
route
.
name
,
reason_text
,
response
)
logger
.
info
(
"
tasks::delete(): DELETED msg=
"
+
msg1
)
announce
(
msg1
,
route
.
applier
,
route
)
else
:
else
:
route
.
status
=
status
route
.
response
=
response
route
.
save
()
msg1
=
"
[%s] Suspending rule : %s%s- Result %s
"
%
(
route
.
applier
,
route
.
name
,
reason_text
,
response
)
logger
.
info
(
"
tasks::delete(): msg=
"
+
msg1
)
announce
(
msg1
,
route
.
applier
,
route
)
try
:
try
:
snmp_add_initial_zero_value
.
delay
(
str
(
route
.
id
),
False
)
except
Exception
as
e
:
except
Exception
as
e
:
logger
.
error
(
"
tasks::delete(): route=
"
+
str
(
route
)
+
"
, INACTIVE, add_null_value failed:
"
+
str
(
e
))
else
:
status
=
"
ERROR
"
route
.
status
=
status
route
.
response
=
response
route
.
save
()
msg1
=
"
[%s] Suspending rule : %s%s- Result %s
"
%
(
route
.
applier
,
route
.
name
,
reason_text
,
response
)
logger
.
info
(
"
tasks::delete(): ERROR msg=
"
+
msg1
)
announce
(
msg1
,
route
.
applier
,
route
)
#
else:
#
status = "ERROR"
#
route.status = status
#
route.response = response
#
route.save()
#
msg1 = "[%s] Suspending rule : %s%s- Result %s" % (route.applier, route.name, reason_text, response)
#
logger.info("tasks::delete(): ERROR msg="+msg1)
#
announce(msg1, route.applier, route)
except
TimeLimitExceeded
:
route
.
status
=
"
ERROR
"
route
.
response
=
"
Task timeout
"
...
...
This diff is collapsed.
Click to expand it.
flowspec/validators.py
+
1
−
1
View file @
566dc0ac
...
...
@@ -41,7 +41,7 @@ def clean_status(status):
:rtype: str
"""
allowed_states
=
[
'
ACTIVE
'
,
'
INACTIVE
'
]
allowed_states
=
[
'
ACTIVE
'
,
'
INACTIVE
'
,
'
INACTIVE_TODELETE
'
]
if
status
not
in
allowed_states
:
return
_
(
'
Invalid status value. You are allowed to use
"
{}
"
.
'
.
format
(
...
...
This diff is collapsed.
Click to expand it.
flowspec/viewsets.py
+
22
−
7
View file @
566dc0ac
...
...
@@ -170,6 +170,16 @@ class RouteViewSet(viewsets.ModelViewSet):
if
serializer
.
is_valid
():
new_status
=
serializer
.
object
.
status
super
(
RouteViewSet
,
self
).
update
(
request
,
pk
,
partial
=
partial
)
logger
.
info
(
"
RouteViewSet::update(): called request=
"
+
str
(
request
))
if
request
.
META
.
has_key
(
'
HTTP_X_METHODOVERRIDE
'
):
method_overriden
=
request
.
META
[
'
HTTP_X_METHODOVERRIDE
'
]
logger
.
info
(
"
RouteViewSet::update(): HTTP_X_METHODOVERRIDE=
"
+
str
(
method_overriden
))
if
method_overriden
==
"
DELETE
"
:
logger
.
info
(
"
RouteViewSet::update(): redirecting to delete with full delete on
"
)
obj
.
status
=
"
INACTIVE_TODELETE
"
return
self
.
delete
(
obj
)
if
old_status
==
'
ACTIVE
'
:
work_on_active_object
(
obj
,
new_status
)
elif
old_status
in
[
'
INACTIVE
'
,
'
ERROR
'
]:
...
...
@@ -198,13 +208,17 @@ class RouteViewSet(viewsets.ModelViewSet):
def
helper_override_user
(
self
,
obj
):
#if self.request.user.is_superuser and obj.applier!=None:
from
django.contrib.auth.models
import
User
if
self
.
request
.
user
.
is_superuser
and
self
.
request
.
POST
[
"
applier
"
]
!=
None
:
os
.
write
(
4
,
"
debug requesta1
"
+
str
(
self
.
request
.
POST
[
"
applier
"
])
+
"
\n
"
)
obj
.
applier
=
User
.
objects
.
get
(
username
=
self
.
request
.
POST
[
"
applier
"
])
applier_speced
=
None
if
"
applier
"
in
self
.
request
.
POST
:
applier_speced
=
self
.
request
.
POST
[
"
applier
"
]
if
self
.
request
.
user
.
is_superuser
and
applier_speced
!=
None
:
os
.
write
(
4
,
"
debug requesta1
"
+
str
(
applier_speced
)
+
"
\n
"
)
obj
.
applier
=
User
.
objects
.
get
(
username
=
applier_speced
)
elif
self
.
request
.
user
.
is_superuser
:
os
.
write
(
4
,
"
debug requesta2
"
+
str
(
self
.
request
.
POST
[
"
applier
"
]
)
+
"
\n
"
)
os
.
write
(
4
,
"
debug requesta2
"
+
str
(
applier_speced
)
+
"
\n
"
)
#obj.applier = self.request.user
obj
.
applier
=
User
.
objects
.
get
(
username
=
'
tomas.jra2t6
'
)
#obj.applier = User.objects.get(username='tomas.jra2t6')
obj
.
applier
=
User
.
objects
.
get
(
username
=
'
david.jra2t6
'
)
#raise PermissionDenied('Is superuser')
#obj.applier = User.objects.get(id='tomas.jra2t6')
#logger.info("debug request "+str(self.request))
...
...
@@ -216,7 +230,7 @@ class RouteViewSet(viewsets.ModelViewSet):
#os.write(4, "debug requestd "+str(dir(self.request))+"\n")
#os.write(4, "debug requestd "+str(type(self.request.POST))+"\n")
#os.write(4, "debug requestd "+str(dir(self.request.POST))+"\n")
#os.write(4, "debug requesta "+str(
self.request.POST["applier"]
)+"\n")
#os.write(4, "debug requesta "+str(
applier_speced
)+"\n")
#obj.comments = obj.comments+" "+str(os.getpid())
else
:
#raise PermissionDenied('Is not superuser')
...
...
@@ -227,8 +241,9 @@ class RouteViewSet(viewsets.ModelViewSet):
obj
.
commit_add
()
def
pre_delete
(
self
,
obj
):
logger
.
info
(
"
RouteViewSet::pre_delete(): called
"
+
str
(
self
)
+
"
, obj=
"
+
str
(
obj
))
obj
.
commit_delete
()
logger
.
info
(
"
RouteViewSet::pre_delete(): returning
"
+
str
(
self
)
+
"
, obj=
"
+
str
(
obj
))
class
PortViewSet
(
viewsets
.
ModelViewSet
):
queryset
=
MatchPort
.
objects
.
all
()
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment