in lambda/rapi/handler/agentregister.go [163:208]
func (h *agentRegisterHandler) registerInternalAgent(
agentName string,
registerRequest *RegisterRequest,
writer http.ResponseWriter,
request *http.Request,
respModifiers ...responseModifier,
) {
for _, e := range registerRequest.Events {
if err := core.ValidateInternalAgentEvent(e); err != nil {
log.Warnf("Failed to register %s: event %s: %s", agentName, e, err)
rendering.RenderForbiddenWithTypeMsg(writer, request, errInvalidEventType, "%s: %s", e, err)
return
}
}
agent, err := h.registrationService.CreateInternalAgent(agentName)
if err != nil {
log.Warnf("Failed to create internal agent %s: %s", agentName, err)
switch err {
case core.ErrRegistrationServiceOff:
rendering.RenderForbiddenWithTypeMsg(writer, request,
errAgentRegistrationClosed, "Extension registration closed already")
case core.ErrAgentNameCollision:
rendering.RenderForbiddenWithTypeMsg(writer, request,
errAgentInvalidState, "Extension with this name already registered")
case core.ErrTooManyExtensions:
rendering.RenderForbiddenWithTypeMsg(writer, request,
errTooManyExtensions, "Extension limit (%d) reached", core.MaxAgentsAllowed)
default:
rendering.RenderInternalServerError(writer, request)
}
return
}
if err := agent.Register(registerRequest.Events); err != nil {
log.Warnf("Failed to register %s: %s", agent.String(), err)
rendering.RenderForbiddenWithTypeMsg(writer, request, errAgentInvalidState, StateTransitionFailedForExtensionMessageFormat,
agent.GetState().Name(), core.AgentRegisteredStateName, agent.Name, err)
return
}
h.renderResponse(agent.ID.String(), writer, request, respModifiers...)
log.Infof("Internal agent %s registered, subscribed to %v", agent.String(), registerRequest.Events)
}