### What happened?
1. Create a functional webhook within EMQX and verify that …it shows as connected.
2. Turn off the associated HTTP server, and confirm that EMQX updates its connection status to **disconnected**.
3. Disable the webhook through the EMQX webhook dashboard; this operation should complete successfully.
<img width="1390" alt="Image" src="https://github.com/user-attachments/assets/0d50d759-cfe7-4d4c-a579-ba772c15b77b" />
### What did you expect to happen?
## Actual Result:
Despite the webhook being disabled, the health check logs continue to be flooded.
```
2025-01-20T08:21:00.780819+00:00 [info] msg: starting_http_connector, mfa: emqx_bridge_http_connector:on_start/2(209), config: #{request => #{path => <<>>,body => undefined,headers => #{'content-type' => <<"application/json">>},method => undefined},ssl => #{depth => 10,verify => verify_none,hibernate_after => 5000,enable => false,ciphers => [],versions => ['tlsv1.3','tlsv1.2'],log_level => notice,secure_renegotiate => true,reuse_sessions => true},description => <<>>,tags => [],connect_timeout => 15000,pool_size => 8,enable => true,headers => #{'content-type' => <<"application/json">>},url => <<"http://host.docker.internal:5001">>,request_base => #{port => 5001,scheme => http,host => "host.docker.internal"},pool_type => random,resource_opts => #{start_timeout => 5000,start_after_created => true,health_check_interval => 15000},enable_pipelining => 100,connector_name => test_WH_D,connector_type => <<"http">>}, connector: <<"connector:http:test_WH_D">>
2025-01-20T08:21:00.799926+00:00 [info] msg: health_check_failed, mfa: emqx_bridge_http_connector:do_get_status/3(621), reason: econnrefused, connector: <<"connector:http:test_WH_D">>
2025-01-20T08:21:00.800365+00:00 [warning] tag: CONNECTOR/WEBHOOK, msg: start_resource_failed, mfa: emqx_resource_manager:start_resource/2(833), reason: econnrefused, resource_id: <<"connector:http:test_WH_D">>
2025-01-20T08:21:03.482508+00:00 [debug] clientid: test1ddddd, msg: cancel_stats_timer, mfa: emqx_connection:cancel_stats_timer/1(490), peername: 172.100.239.1:44038
2025-01-20T08:21:15.806725+00:00 [info] msg: starting_http_connector, mfa: emqx_bridge_http_connector:on_start/2(209), config: #{request => #{path => <<>>,body => undefined,headers => #{'content-type' => <<"application/json">>},method => undefined},ssl => #{depth => 10,verify => verify_none,hibernate_after => 5000,enable => false,ciphers => [],versions => ['tlsv1.3','tlsv1.2'],log_level => notice,secure_renegotiate => true,reuse_sessions => true},description => <<>>,tags => [],connect_timeout => 15000,pool_size => 8,enable => true,headers => #{'content-type' => <<"application/json">>},url => <<"http://host.docker.internal:5001">>,request_base => #{port => 5001,scheme => http,host => "host.docker.internal"},pool_type => random,resource_opts => #{start_timeout => 5000,start_after_created => true,health_check_interval => 15000},enable_pipelining => 100,connector_name => test_WH_D,connector_type => <<"http">>}, connector: <<"connector:http:test_WH_D">>
2025-01-20T08:21:15.811493+00:00 [info] msg: health_check_failed, mfa: emqx_bridge_http_connector:do_get_status/3(621), reason: econnrefused, connector: <<"connector:http:test_WH_D">>
2025-01-20T08:21:15.811936+00:00 [warning] tag: CONNECTOR/WEBHOOK, msg: start_resource_failed, mfa: emqx_resource_manager:start_resource/2(833), reason: econnrefused, resource_id: <<"connector:http:test_WH_D">>
2025-01-20T08:21:18.479263+00:00 [debug] tag: MQTT, clientid: test1ddddd, msg: raw_bin_received, mfa: emqx_connection:when_bytes_in/3(789), peername: 172.100.239.1:44038, size: 2, type: hex, bin: C000
2025-01-20T08:21:18.479853+00:00 [debug] tag: MQTT, clientid: test1ddddd, msg: mqtt_packet_received, mfa: emqx_connection:handle_msg/2(586), peername: 172.100.239.1:44038, packet: PINGREQ(Q0, R0, D0)
2025-01-20T08:21:18.480369+00:00 [debug] tag: MQTT, clientid: test1ddddd, msg: mqtt_packet_sent, mfa: emqx_connection:serialize_and_inc_stats_fun/1(957), peername: 172.100.239.1:44038, packet: PINGRESP(Q0, R0, D0)
2025-01-20T08:21:30.813056+00:00 [info] msg: starting_http_connector, mfa: emqx_bridge_http_connector:on_start/2(209), config: #{request => #{path => <<>>,body => undefined,headers => #{'content-type' => <<"application/json">>},method => undefined},ssl => #{depth => 10,verify => verify_none,hibernate_after => 5000,enable => false,ciphers => [],versions => ['tlsv1.3','tlsv1.2'],log_level => notice,secure_renegotiate => true,reuse_sessions => true},description => <<>>,tags => [],connect_timeout => 15000,pool_size => 8,enable => true,headers => #{'content-type' => <<"application/json">>},url => <<"http://host.docker.internal:5001">>,request_base => #{port => 5001,scheme => http,host => "host.docker.internal"},pool_type => random,resource_opts => #{start_timeout => 5000,start_after_created => true,health_check_interval => 15000},enable_pipelining => 100,connector_name => test_WH_D,connector_type => <<"http">>}, connector: <<"connector:http:test_WH_D">>
```
The connectors interface remains enabled for the connector, and it still displays as enabled rather than disabled.
<img width="1538" alt="Image" src="https://github.com/user-attachments/assets/86a826de-3965-43c7-96ee-f827b00f26a4" />
## Expected Result:
After disabling the webhook, EMQX should cease performing health checks on the webhook, thus stopping the related log entries.
The connectors dashboard should accurately reflect the disabled state of the webhook and allow users to edit or configure the connector as needed.
### How can we reproduce it (as minimally and precisely as possible)?
_No response_
### Anything else we need to know?
_No response_
### EMQX version
<details>
```console
./bin/emqx_ctl broker
sysdescr : EMQX
version : 5.8.4-alpha.1-g84dd9ae0
datetime : 2025-01-20T08:23:43.156953364+00:00
uptime : 3 hours, 23 minutes, 0 seconds
```
</details>
### OS version
<details>
```console
# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here
```
</details>
```bash
./bin/emqx ctl conf show actions
actions {
http {
test_WH_D {
connector = test_WH_D
description = ""
enable = false
parameters {
headers {content-type = "application/json"}
max_retries = 2
method = post
}
resource_opts {
health_check_interval = "15s"
inflight_window = 100
max_buffer_bytes = "256MB"
query_mode = sync
request_ttl = "45s"
worker_pool_size = 16
}
tags = []
}
}
mqtt {}
}
./bin/emqx ctl conf show connectors
connectors {
http {
test_WH_D {
connect_timeout = "15s"
description = ""
enable = true
enable_pipelining = 100
headers {content-type = "application/json"}
pool_size = 8
pool_type = random
resource_opts {
health_check_interval = "15s"
start_after_created = true
start_timeout = "5s"
}
ssl {
ciphers = []
depth = 10
enable = false
hibernate_after = "5s"
log_level = notice
reuse_sessions = true
secure_renegotiate = true
verify = verify_none
versions = [
"tlsv1.3",
"tlsv1.2"
]
}
tags = []
url = "http://host.docker.internal:5001"
}
}
mqtt {}
}
```
I suspect that the dashboard does not truly disable the webhook's connector(**only disable the action**) when disabling it. If this is the case, it would mean that we cannot disable the webhook's connector via the dashboard; instead, we would only be able to delete it.
Proposal: When clicking disable on the Webhook dashboard, simultaneously disable the associated actions and connectors.
This would ensure that disabling a webhook properly ceases all related activities, providing a more consistent and reliable user experience.