Now let's write the main
There are many events that based on that event you can do an action. Let's review some of the codes above.
Now to test it go to
Enjoy working with
#chrome #xtension
JS code in order to add menu items into Chrome extension. Create background.js file in the same directory as manifest.json with the content below:if (chrome && chrome.browserAction){
var baseUrl = "https://www.example.com"
chrome.runtime.onInstalled.addListener(function() {
chrome.tabs.create({ url: baseUrl + "/extension-installed/" });
});
chrome.runtime.setUninstallURL(baseUrl + "/extension-uninstalled/");
// open a new page on left clicking on the extension itself
chrome.browserAction.onClicked.addListener(function(activeTab) {
chrome.tabs.create({ url: baseUrl + "/my-home-page" });
});
chrome.contextMenus.create({
"id": "first_item",
"title": "This is the first item",
"contexts": ["browser_action"]
});
chrome.contextMenus.create({
"id": "second_item",
"title": "This is the second item",
"contexts": ["browser_action"]
});
chrome.contextMenus.onClicked.addListener(function(info)
{
urls = {
first_item: baseUrl + "/first-item",
second_item: baseUrl + "/second-item"
};
chrome.tabs.create({url: urls[info.menuItemId]});
});
}There are many events that based on that event you can do an action. Let's review some of the codes above.
chrome.runtime.onInstalled.addListener: on extension installation open a url using chrome.tabs. As you recall from the previous post we have added tabs to the permission section of manifest.chrome.runtime.setUninstallURL: open a url on extension uninstallation.chrome.browserAction.onClicked.addListener: open a url when your extension in toolbar is clicked (at the right of the address bar).chrome.contextMenus.create: create an item with specific id and title. contexts sections tells the browser to show the menu just when user right click on the extension in toolbar. You can add page to have the extension menu item on the main page of browser itself.chrome.contextMenus.onClicked.addListener: When one of the menu items is clicked open the corresponding URL.Now to test it go to
chrome://extensions/. Make sure developer mode is enabled. Click on Load unpacked and select your extension folder and open it. It will be installed by now.Enjoy working with
Chrome Extension! :)#chrome #xtension
How to check
We assume here that you have a replica set in place. First download the python script for our nagios plugin:
Now the
Create a new file
Create a new file in
This service gets enabled where it finds
#sysadmin #icinga2 #mongodb #replication #replication_lag #nagios_plugin
MongoDB replication lag in Icinga2 and get notified when it is over 15 seconds?We assume here that you have a replica set in place. First download the python script for our nagios plugin:
cd /usr/lib/nagios/plugins
git clone git://github.com/mzupan/nagios-plugin-mongodb.git
Now the
Icinga2 part. You first need to create a command for replication lag check:cd /etc/icinga2/conf.d/commands
Create a new file
replication_lag.conf:object CheckCommand "check_replication_lag" {
import "plugin-check-command"
command = [ PluginDir + "/nagios-plugin-mongodb/check_mongodb.py", "-A", "replication_lag" ]
arguments = {
"-H" = "$mongo_host$"
"-P" = "$mongo_port$"
}
}Create a new file in
services folder called replication_lag.conf:apply Service for (display_name => config in host.vars.replication) {
import "generic-service"
check_command = "check_replication_lag"
vars += config
assign where host.vars.replication
}This service gets enabled where it finds
replication in host config. Now in secondary mongoDB hosts configuration add the below part:vars.replication["Secondary DB"] = {
mongo_host = "slave.example.com"
mongo_port = 27017
}#sysadmin #icinga2 #mongodb #replication #replication_lag #nagios_plugin
I have a script that checks a source folder for new files in case there are files in the source folder, it will move those files to destination.
The problem I encountered recently was that files are huge and it may be in the middle of the copying into source by another process so my script tries to move an incomplete file to a destination. Let's say the file is 4GB in size and just only 1GB of the file has been copied. I have to wait until file is 4GB and other handler using that file, then I should safely move the file.
You can use
#linux #sysadmin #lsof #grep
The problem I encountered recently was that files are huge and it may be in the middle of the copying into source by another process so my script tries to move an incomplete file to a destination. Let's say the file is 4GB in size and just only 1GB of the file has been copied. I have to wait until file is 4GB and other handler using that file, then I should safely move the file.
You can use
lsof command in order to check which processes are using the source file:if [[ `lsof -- /var/my-folder/my-big-file.tar.gz` ]]
then
echo "File is being used by a process."
exit 1
fi
NOTE: you can give file directly to lsof using -- or you can use grep command as follow:lsof | grep /var/my-folder/my-big-file.tar.gz
NOTE2: if you are in a loop use break instead of exit.NOTE3: if you get command not found, install it using apt-get install lsof#linux #sysadmin #lsof #grep
How to upgrade
The procedure is dead simple! Mail server itself notifies you about the new updates in its admin panel. Head over to the given link and download the the appropriate file related to your OS. Usually a
1- First make it executable:
2- Now stop
3- Run the installer and go in an interactive way. JUST be sure to skip the
4- Now start
#mail_server #axigen #upgrade #update
Axigen mail server?The procedure is dead simple! Mail server itself notifies you about the new updates in its admin panel. Head over to the given link and download the the appropriate file related to your OS. Usually a
.run file.1- First make it executable:
chmod +x axigen-10.2.2.x86_64.rpm.run
NOTE: here my version update may differ from yours.2- Now stop
Axigen.3- Run the installer and go in an interactive way. JUST be sure to skip the
Axigen post-install configuration wizard.4- Now start
Axigen.NOTE: in case you want to take backup copy the folder /var/opt/axigen in a safe place. This path may differ based on your OS and your distro.#mail_server #axigen #upgrade #update
Have you heard about
If you know it, but like me you don't know it as you should and every time the bowser gives you a new error in
#browser #mozilla #CORS #cross_origin #cross_origin_resource_sharing
CORS (Cross Origin Resource Sharing)?If you know it, but like me you don't know it as you should and every time the bowser gives you a new error in
console you again get wandered in the wilderness, I'd suggest going to the awesome link below and read thoroughly line by line:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
NOTE: this article is fantastic! Believe you me. You will understand eveything you need to know exactly what is CORS and how to handle it properly.#browser #mozilla #CORS #cross_origin #cross_origin_resource_sharing
nginX by default does not set CORS headers for requests with error status codes like 401. There are 2 options here to add CORS headers:1- If your nginX version is new you have the option of
always to add to add_header:add_header 'Access-Control-Allow-Origin' $http_origin always;
2- If you got error of
invalid number of arguments in "add_header" directive, then use more_set_headers:more_set_headers -s '401 400 403 404 500' 'Access-Control-Allow-Origin: $http_origin';
NOTE: when this error happens then in $.ajax or any similar method you wont have access to status codes. So be extremely catious!!!#nginX #web_server #CORS #more_set_headers #add_header #ajax
How to upload a text content as a file in
We have created a binary data from the text which is in the format of
The
#javascript #jQuery #ajax #FormData #Blob #upload
$.Ajax()?FormData class is used to create a multipart/form-data inside of JS code. A sample code speaks thousand words:var formData = new FormData();
var blob = new Blob([YOUR_CONTENT_HERE], { type: "text/html"});
formData.append("file", blob);
We have created a binary data from the text which is in the format of
text/html, then I have appended the data as an input file with the name of file (which will be captured on server-side).The
Ajax part is utterly simple:$.ajax({
type: 'POST',
url: 'https://www.example.com/storage',
data: formData,
processData: false,
contentType: false
}).done(function(data) {});NOTE: DO NOT OMIT processData, contentType parameters.#javascript #jQuery #ajax #FormData #Blob #upload
Does that happen for you too, to
Let's say you are in a long path like
#linux #cd
CD into a wrong directory and need to get back to the previous directory?Let's say you are in a long path like
/mnt/new_volume/backup/files/archive, now you switch to home of your directory. In order to get back to the previous directory, you just need to issue the below command:cd -
#linux #cd
https://spyhce.com/blog/understanding-new-and-init
#python27 #python3 #__init__ #__new__ #old_style #new_style #OOP #class #super
#python27 #python3 #__init__ #__new__ #old_style #new_style #OOP #class #super
Spyhce
__new__ and __init__ | Spyhce blog
The __new__ and __init__ methods behave differently between themselves and between the old-style versus new-style python class definitions.
How to convert
#javascript #ByteArray #PDF #Uint8Array #Blob #jQuery
ByteArray to PDF and then upload it via jQuery?var docData = [ yourByteArray ];
var blob = new Blob([new Uint8Array(docData)], { type: 'application/pdf' });
// Now create form to upload the file
var formData = new FormData();
formData.append("file", blob);
// Let's now upload the file
$.ajax({
type: 'POST',
url: 'https://www.YOUR-UPLOAD-FILE-ENDPOINT.com/storage',
beforeSend: request => set_ajax_headers(request),
data: formData,
processData: false,
contentType: false
}).done(function(data) {
console.log('File is uploaded!');
});
NOTE: function set_ajax_headers is a function that sets headers on the given request.#javascript #ByteArray #PDF #Uint8Array #Blob #jQuery